Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多个内部联接返回错误_Sql_Sql Server - Fatal编程技术网

Sql 多个内部联接返回错误

Sql 多个内部联接返回错误,sql,sql-server,Sql,Sql Server,以下是我的数据库中的表: 我需要上表中的以下列,如下所示: tblVendor:名称(如供应商名称) tblVendorItem:名称(作为供应商名称) tblEvent:Name(作为EventName)和EventDate tblEventService:服务日期和状态 我编写了以下查询来检索上述数据: SELECT tblEvent.NAME AS 'EventName', tblEvent.EventDate AS 'Even

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

我需要上表中的以下列,如下所示:

tblVendor:
名称
(如
供应商名称

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。。。愚蠢的问题。。非常感谢你。。。这个查询运行得很好!每个人都有金发的时刻。欢迎光临!很乐意帮忙。