SQL Server:具有元组IN子句的多连接

SQL Server:具有元组IN子句的多连接,sql,sql-server,Sql,Sql Server,我正在尝试连接4个关系有点复杂的表。由于要在何处使用它,它需要包含在单个查询中,但我遇到了问题,因为主查询和in子句查询都将两个表连接在一起,并且查找在两列上 目标是输入SalesNum和SalesType并让它返回Price 表和关系: sdShipping SalesNum[1] SalesType[2] Weight[3] sdSales SalesNum[1] SalesType[2] Zip[4] Zip[4] Zone[5] Zone[5] Price Weight[3] s

我正在尝试连接4个关系有点复杂的表。由于要在何处使用它,它需要包含在单个查询中,但我遇到了问题,因为主查询和in子句查询都将两个表连接在一起,并且查找在两列上

目标是输入
SalesNum
SalesType
并让它返回
Price

表和关系:

sdShipping

SalesNum[1]
SalesType[2]
Weight[3]
sdSales

SalesNum[1]
SalesType[2]
Zip[4]
Zip[4]
Zone[5]
Zone[5]
Price
Weight[3]
spZones

SalesNum[1]
SalesType[2]
Zip[4]
Zip[4]
Zone[5]
Zone[5]
Price
Weight[3]
价格

SalesNum[1]
SalesType[2]
Zip[4]
Zip[4]
Zone[5]
Zone[5]
Price
Weight[3]
下面是我在T-SQL中的最新尝试:

SELECT 
    spp.Price 
FROM 
    spZones AS spz 
LEFT OUTER JOIN 
    spPrices AS spp ON spz.Zone = spp.Zone 
WHERE 
    (spp.Weight, spz.Zip) IN (SELECT ship.Weight, sales.Zip 
                              FROM sdShipping AS ship 
                              LEFT OUTER JOIN sdSales AS sales ON sales.SalesNum = ship.SalesNum 
                                                               AND sales.SalesType = ship.SalesType
                              WHERE sales.SalesNum = (?) 
                                AND ship.SalesType = (?));

SQLServerManagementStudio说我在“,”附近的语法中有一个错误(错误消息)。有人知道微软版本的SQL是否允许这样做吗?也许还有其他方法可以实现它吗?我已经在这里看到了答案中的多键问题,但在双方都需要连接的情况下从未见过。

许多数据库确实支持元组中的
。SQL Server不是其中之一

改用
存在

SELECT spp.Price 
FROM spZones spz LEFT OUTER JOIN
     spPrices spp
     ON spz.Zone = spp.Zone 
WHERE EXISTS (SELECT 1
              FROM sdShipping ship LEFT JOIN
                   sdSales sales 
                   ON sales.SalesNum = ship.SalesNum AND
                      sales.SalesType = ship.SalesType
              WHERE spp.Weight = ship.Weight AND spz.Zip = sales.Zip AND
                    sales.SalesNum = (?) AND
                    ship.SalesType = (?)
             );

戈登,你真是个天才,这真的很有帮助,谢谢!我仍然没有得到任何结果,但至少它不再给我一个错误。。。不要再在条款中浪费时间了。一旦我能弄清楚还有什么东西没拿到,我会给你评分的Price@Typel . . . 你的问题相当复杂。一种可能是重量不匹配——这似乎是一个更大范围的数字。打得好,我曾一度用天花板来表示重量,但在几次错误尝试后,我一定试过把它掉下来。还在SalesNum和SalesType上尝试RTRIM,因为它们的末尾偶尔有空白字符。还没什么,但我觉得它很接近……好吧,不管怎样,你已经回答了最初的问题——剩下的可能是我在修补数据。将关闭此窗口-再次感谢您的帮助!