SQL 服务器:多列子查询

SQL Server : multiple column subquery

假设我想查询任何商品的订单号、商品编号和数量,其中商品编号和数量与 ordid 365 中商品的商品编号和数量相匹配且 productCategory 为“电子产品” .

我尝试过如下操作:

SELECT 
    ordid, prodid, qty
FROM 
    item
WHERE 
    ((prodid, qty) IN (SELECT prodid, qty
                       FROM item
                       WHERE ordid = 365)
     AND productCategory = "Electronics")

但我收到以下错误:

An expression of non-boolean type specified in a context where a condition is expected, near ','.

Incorrect syntax near the keyword 'and'.

我是否使用了正确的 T-SQL 语法来执行此类操作?

提前致谢!

使用exists。 SQL 服务器不支持元组:

WHERE EXISTS (SELECT 1
              FROM item i2
              WHERE i2.prodid = item.prodid AND i2.qty = item.qty AND
                    i2.ordid = 365
             )

与内联视图的连接也应该是一种有效的方法

SELECT t1.ordid, t1.prodid, t1.qty
FROM item t1 inner join 
     (select prodid, qty FROM item WHERE ordid=365 AND productCategory="Electronics") t2
         on t1.prodid = t2.prodid and t1.qty = t2.qty 

有一种方法可以使用元组语法,更正确的说法是 行值比较器。比ANSI-SQL有点乱,不过还可以:

SELECT 
    ordid, prodid, qty
FROM 
    item i
WHERE EXISTS (SELECT i.prodid, i.qty
              INTERSECT
              SELECT i2.prodid, i2.qty
              FROM item i2
              WHERE i2.ordid = 365
             )

它看起来很奇怪,但 它实际上对比较可为 null 的列 非常有用,因为 INTERSECT 比较 NULLs 是相等的。