Sql 多个内部联接返回错误
以下是我的数据库中的表: 我需要上表中的以下列,如下所示: tblVendor:Sql 多个内部联接返回错误,sql,sql-server,Sql,Sql Server,以下是我的数据库中的表: 我需要上表中的以下列,如下所示: tblVendor:名称(如供应商名称) tblVendorItem:名称(作为供应商名称) tblEvent:Name(作为EventName)和EventDate tblEventService:服务日期和状态 我编写了以下查询来检索上述数据: SELECT tblEvent.NAME AS 'EventName', tblEvent.EventDate AS 'Even
名称
(如供应商名称
)
tblVendorItem:名称
(作为供应商名称
)
tblEvent:Name
(作为EventName
)和EventDate
tblEventService:服务日期
和状态
我编写了以下查询来检索上述数据:
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,第16级,状态1,第1行,对象“tblEventService”和
FROM子句中的“tblEventService”具有相同的公开名称。使用
关联名称以区分它们
我做错了什么?或者查询本身是错误的?您忘记加入表“tblVendorItem”
您忘记加入表“tblVendorItem”
按照建议,在加入同一个表时使用别名,如下所示:
SELECT es1.EventID
FROM tblEventServices es1
JOIN tblEventServices es2
ON es1.EventID = es2.EventID --or however you wish to join them
按照建议,在加入同一个表时使用别名,如下所示:
SELECT es1.EventID
FROM tblEventServices es1
JOIN tblEventServices es2
ON es1.EventID = es2.EventID --or however you wish to join them
如果实际多次引用同一个表,则需要提供别名,以便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
别名来区分两次加入同一个表。如果实际多次引用同一个表,则需要提供别名,以便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
别名来区分的。我想看到的是链接到一个事件的EventService
的数量。此处EventService
将是事件中的产品。。因此,如果有两种产品,那么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;
此查询生成所需的结果,如下所示:
谢谢大家 我想看到链接到一个事件的EventService
的数量。此处EventService
将是事件中的产品。。因此,如果有两种产品,那么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;
此查询生成所需的结果,如下所示:
谢谢大家 您提供的查询看起来很好。这是实际的查询吗?该错误似乎表明在查询from
子句中有多个同名表。检查您是否两次没有实际包含tblEventService。这是您的实际查询吗?如果您两次加入同一个表而不使用别名来区分它们,通常会看到这样的消息。错误表明FROM子句包含两个名为“tblEventService”的对象。你改变了你的查询吗?@NathanKoop:我在同一个表上有多个连接/使用同一个表!在这种情况下我该怎么办?为什么你发布了一个不同的查询,而这个查询给了你一个错误?。如果您多次使用同一个表,那么您应该使用别名(或者更好的是,始终为您的表使用别名)。您提供的查询看起来很好。这是实际的查询吗?该错误似乎表明在查询from
子句中有多个同名表。检查您是否两次没有实际包含tblEventService。这是您的实际查询吗?如果您两次加入同一个表而不使用别名来区分它们,通常会看到这样的消息。错误表明FROM子句包含两个名为“tblEventService”的对象。你改变了你的查询吗?@NathanKoop:我在同一个表上有多个连接/使用同一个表!在这种情况下我该怎么办?为什么你发布了一个不同的查询,而这个查询给了你一个错误?。如果您多次使用同一个表,那么您应该使用别名(或者更好的是,始终为您的表使用别名),但我需要“VendorName”列。。您的查询工作正常,但我需要该列。。。我该怎么办?@AbhishekGhosh显然你应该加入表VendorItem
我将它添加到我认为你希望它加入的方式中arghh。。。愚蠢的问题。。非常感谢你。。。这个查询运行得很好!每个人都有金发的时刻。欢迎光临!很乐意帮忙。但我需要“VendorName”专栏。。您的查询工作正常,但我需要该列。。。我该怎么办?@AbhishekGhosh显然你应该加入表VendorItem
我将它添加到我认为你希望它加入的方式中arghh。。。愚蠢的问题。。非常感谢你。。。这个查询运行得很好!每个人都有金发的时刻。欢迎光临!很乐意帮忙。