以下是我数据库中的表格:
我需要按照以下方式跟踪上表中的列:
tblVendor: Name
(AS VendorName
)
tblVendorItem: Name
(AS VendorItemName
)
tblEvent: Name
(AS EventName
)和EventDate
tblEventService: ServiceDate
和Status
我编写了以下查询来检索上述数据:
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子句中具有相同的公开名称。使用 相关名称来区分它们。
我在这里做错了什么?或者查询本身是错误的?
答案 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 ...
因此,现在两次加入同一个表的区别为es1
和es2
个别名。
答案 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;
此查询产生如下所需的结果:
谢谢大家!