我正在尝试连接 4 个具有复杂关系的表。由于要使用它的位置,它需要包含在单个查询中,但我遇到了麻烦,因为主查询和 IN 子句查询都将 2 个表连接在一起,并且查找是在两列上进行的。
目标是输入一个SalesNum
and SalesType
并让它返回Price
表和关系:
顺德航运
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 说我在“,”附近的语法中有错误(实际上是无用的错误消息)。有谁知道 Microsoft 版本的 SQL 是否允许这样做?也许还有另一种方法可以实现它吗?我已经看到这里回答了多键 IN 问题,但从未见过双方都需要 JOIN 的情况。
很多数据库都支持IN
在元组上。 SQL Server 不是其中之一。
Use 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 = (?)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)