我正在尝试加入4个关系有些复杂的表格。因为它将被使用,它需要包含在单个查询中,但是我遇到了麻烦,因为主查询和IN子句查询都将两个表连接在一起,而查找在两列上。
目标是输入SalesNum
和SalesType
并让它返回Price
表和关系:
sdShipping
SalesNum[1]
SalesType[2]
Weight[3]
sdSales
SalesNum[1]
SalesType[2]
Zip[4]
spZones
Zip[4]
Zone[5]
spPrices
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 = (?));
SQL Server Management Studio说我的语法附近有','(相当无用的错误消息)。有没有人知道微软的SQL版本是否允许这样做?还有其他方法可以实现吗?我已经在这里看到了多键的IN问题,但从来没有双方都需要加入。
答案 0 :(得分:1)
许多数据库都支持元组IN
。 SQL Server不是其中之一。
改为使用EXISTS
:
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 = (?)
);