SQL Server:使用元组 IN 子句进行多重连接

2024-02-01

我正在尝试连接 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(使用前将#替换为@)

SQL Server:使用元组 IN 子句进行多重连接 的相关文章

随机推荐