多个内部联接返回错误

时间:2015-03-25 16:04:38

标签: sql sql-server

以下是我数据库中的表格:

enter image description here

我需要按照以下方式跟踪上表中的列:

tblVendor: Name(AS VendorName

tblVendorItem: Name(AS VendorItemName

tblEvent: Name(AS EventName)和EventDate

tblEventService: ServiceDateStatus

我编写了以下查询来检索上述数据:

SELECT tblEvent.NAME               AS 'EventName',
       tblEvent.EventDate          AS 'EventDate',
       tblVendorItem.NAME          AS 'VendorItem',
       tblVendor.NAME              AS 'VendorName',
       tblEventService.ServiceDate AS 'Date',
       tblEventService.Status
FROM   tblEvent
       INNER JOIN tblEventService
               ON tblEvent.EventID = tblEventService.EventID
       INNER JOIN tblVendor
               ON tblEventService.VendorID = tblVendor.VendorID
       INNER JOIN tblEventItem
               ON tblEventService.EventServiceID = tblEventItem.EventServiceID
WHERE  tblEvent.CustomerID = @C_ID; 

但我不知道为什么sql引擎会返回以下错误:

  

Msg 1013,Level 16,State 1,Line 1对象" tblEventService"和   " tblEventService" FROM子句中具有相同的公开名称。使用   相关名称来区分它们。

我在这里做错了什么?或者查询本身是错误的?

4 个答案:

答案 0 :(得分:2)

根据建议,在连接同一个表时使用别名,如下所示:

SELECT es1.EventID
FROM tblEventServices es1
JOIN tblEventServices es2
ON es1.EventID = es2.EventID --or however you wish to join them

答案 1 :(得分:2)

如果您实际上多次引用同一个表,则需要提供别名,以便SQL Server可以区分这两个引用。以此为例:

SELECT ... -- some fields
       es1.ServiceDate AS 'Date',
       es2.Status
FROM   tblEvent
       -- 2 joins to same table
       INNER JOIN tblEventService es1 ON tblEvent.EventID = es1.EventID
       INNER JOIN tblEventService es2 ON tblEvent.EventID = es2.EventID
       -- some other joins
WHERE  ...

因此,现在两次加入同一个表的区别为es1es2个别名。

答案 2 :(得分:1)

您忘了加入表“tblVendorItem”

SELECT tblEvent.NAME               AS 'EventName',
       tblEvent.EventDate          AS 'EventDate',
       tblVendorItem.NAME          AS 'VendorItem',
       tblVendor.NAME              AS 'VendorName',
       tblEventService.ServiceDate AS 'Date',
       tblEventService.Status
FROM   tblEvent
       INNER JOIN tblEventService
               ON tblEvent.EventID = tblEventService.EventID
       INNER JOIN tblVendor
               ON tblEventService.VendorID = tblVendor.VendorID
       INNER JOIN tblEventItem
               ON tblEventService.EventServiceID = tblEventItem.EventServiceID
       INNER JOIN tblVendorItem
               ON tblEventService.VendorID = tblVendorItem.VendorID
WHERE  tblEvent.CustomerID = @C_ID; 

答案 3 :(得分:0)

我想要的是看到EventService与一个事件相关联的数量。此处EventService将是Event中的产品..因此,如果有两种产品,则tblEventService中将有两个条目。

我在@Stephan Calderon的一个答案的帮助下写了以下查询:

SELECT tblEventService.ServiceDate,
       tblEventService.ServiceVenue AS 'SERVICE_VENUE',
       tblEventService.Status AS 'SERVICE_STATUS',
       tblEventService.CustomerRemarks AS 'CUSTOMER_REMARKS',
       tblEventItem.Quantity AS 'QTY',
       tblVendorItem.Name AS 'PRODUCT_NAME',
       tblVendorItem.Price AS 'PRICE',
       tblEvent.Name AS 'EVENT_NAME',
       tblCustomer.Name AS 'CCUSTOMER_NAME',
       tblEventType.Name AS 'EVENT_TYPE_NAME'

FROM tblEventService 

        INNER JOIN tblEventItem ON
                tblEventService.EventServiceID = tblEventItem.EventServiceID

        INNER JOIN tblVendorItem ON 
                tblVendorItem.VendorItemID = tblEventItem.VendorItemID

        INNER JOIN tblEvent ON 
                tblEvent.EventID = tblEventService.EventID

        INNER JOIN tblCustomer ON
                tblEvent.CustomerID = tblCustomer.CustomerID

        INNER JOIN tblEventType ON
                tblEvent.EventTypeID = tblEventType.EventTypeID

WHERE tblEventService.EventID = @eventID;

此查询产生如下所需的结果:

enter image description here

谢谢大家!