如何使用INNER JOIN联接SQL中的7个表

时间:2019-04-18 00:34:54

标签: sql sql-server stored-procedures

我正在创建一个存储过程,以使用INNER JOIN联接SQL中的7个表,但是我收到有关语法错误的错误。

我尝试调整格式,但是语法不正确。有人知道我哪里出问题了吗?我收到一个错误提示

  

“ WHERE”附近的语法不正确

我的代码:

CREATE PROCEDURE [dbo].[spInvoicing]
    @InvoiceId INT
AS
BEGIN
    SELECT
        tblInvoices.InvoiceId, tblInvoices.InvoiceDate, 
        tblClients.Firstname, tblClients.Surname, tblClients.Address, tblClients.City, 
        tblClients.Postcode, tblClients.Email, tblClients.Phone, 
        tblAppointments.AppointmentId, tblAppointments.DateOfAppointment, 
        tblProductsUsed.ProductsUsedId, tblProducts.ProductName, tblProductsUsed.Quantity, 
        tblPointofSale.SaleId, tblPointOfSale.CostOfProducts, tblPointOfSale.CostOfServices, 
        tblPointOfSale.VAT, tblInvoices.SaleAmount, tblInvoices.PaymentMethod 
    FROM
        tblClients 
    INNER JOIN
        tblAppointments ON tblClients.ClientId = tblAppointments.ClientId  
    INNER JOIN
        tblPointOfSale 
    INNER JOIN
        tblInvoices ON tblPointOfSale.SaleId = tblInvoices.SaleId 
    INNER JOIN
        tblProductsUsed 
    INNER JOIN
        tblProducts ON tblProductsUsed.ProductId = tblProducts.ProductId 
    INNER JOIN
        tblServicesRendered 
    INNER JOIN 
        tblServices ON tblServicesRendered.ServiceId = tblServices.ServiceId ON tblServicesRendered.AppointmentId =  tblAppointments.AppointmentId 
        ON tblPointOfSale.AppointmentId = tblAppointments.AppointmentId 
        AND tblProductsUsed.SaleId = tblPointOfSale.SaleId 
        AND tblPointOfSale.ClientId = tblClients.ClientId
    WHERE 
        tblInvoices.InvoiceId = @InvoiceId
END

2 个答案:

答案 0 :(得分:2)

您的JOIN有点混乱。请在下面尝试此操作,看看是否可以解决语法错误。

始终尝试使您的JOIN遵循INNER JOIN [Table2] ON [Table2].[Field1] = [Table1].[Field1]格式

FROM tblClients
    INNER JOIN tblAppointments ON tblClients.ClientId = tblAppointments.ClientId
    INNER JOIN tblPointOfSale ON tblPointOfSale.AppointmentId = tblAppointments.AppointmentId
        AND tblPointOfSale.ClientId = tblClients.ClientId
    INNER JOIN tblInvoices ON tblPointOfSale.SaleId = tblInvoices.SaleId 
    INNER JOIN tblProductsUsed ON tblProductsUsed.SaleId = tblPointOfSale.SaleId
    INNER JOIN tblProducts ON tblProductsUsed.ProductId = tblProducts.ProductId 
    INNER JOIN tblServicesRendered ON tblServicesRendered.AppointmentId =  tblAppointments.AppointmentId
    INNER JOIN tblServices ON tblServicesRendered.ServiceId = tblServices.ServiceId

答案 1 :(得分:1)

我只是将您的代码复制并粘贴到此网站-http://poorsql.com/ 并为您突出显示了错误(联接中缺少AND)。 正如@DBro所说-养成将JOIN放在新行上并对其格式进行一些不同的习惯,这样您的麻烦就少得多了。