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
比较 NULL
s 是相等的。
假设我想查询任何商品的订单号、商品编号和数量,其中商品编号和数量与 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
比较 NULL
s 是相等的。