SQL Server:具有元组IN子句的多连接
我正在尝试连接4个关系有点复杂的表。由于要在何处使用它,它需要包含在单个查询中,但我遇到了问题,因为主查询和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
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,因为它们的末尾偶尔有空白字符。还没什么,但我觉得它很接近……好吧,不管怎样,你已经回答了最初的问题——剩下的可能是我在修补数据。将关闭此窗口-再次感谢您的帮助!