SQL Server:多列子查询

SQL Server:多列子查询,sql,sql-server,subquery,Sql,Sql Server,Subquery,假设我想查询任何项目的订单号、产品号和数量,其中产品号和数量与ORDD 365中项目的产品号和数量匹配,并且产品类别为电子产品 我已尝试按如下方式进行: SELECT ordid, prodid, qty FROM item WHERE ((prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 365)

假设我想查询任何项目的订单号、产品号和数量,其中产品号和数量与ORDD 365中项目的产品号和数量匹配,并且产品类别为电子产品

我已尝试按如下方式进行:

SELECT 
    ordid, prodid, qty
FROM 
    item
WHERE 
    ((prodid, qty) IN (SELECT prodid, qty
                       FROM item
                       WHERE ordid = 365)
     AND productCategory = "Electronics")
但我得到了以下错误:

在“,”附近预期条件的上下文中指定的非布尔型表达式

关键字“and”附近的语法不正确

我是否使用了正确的T-SQL语法来执行这种操作

提前谢谢

使用存在。SQL Server不支持元组:

WHERE EXISTS (SELECT 1
              FROM item i2
              WHERE i2.prodid = item.prodid AND i2.qty = item.qty AND
                    i2.ordid = 365
             )
使用存在。SQL Server不支持元组:

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

使用内联视图进行连接也应该是一种有效的方法

选择t1.ordid、t1.prodid、t1.qty 从项目t1内部连接 从ORDD=365和productCategory=t2的项目中选择prodid、qty 在t1.prodid=t2.prodid和t1.qty=t2.qty上
使用内联视图进行连接也应该是一种有效的方法

选择t1.ordid、t1.prodid、t1.qty 从项目t1内部连接 从ORDD=365和productCategory=t2的项目中选择prodid、qty 在t1.prodid=t2.prodid和t1.qty=t2.qty上
有一种方法可以使用元组语法,更准确地说是行值比较器。它比ANSI-SQL有点混乱,但仍然可以:

选择 ordid,prodid,数量 从…起 项目一 如果存在,请选择i.prodid,i.qty 横断 选择i2.prodid,i2.qty 来自项目i2 其中i2.ordid=365
它看起来很奇怪,但实际上对于比较可为空的列非常有用,因为INTERSECT将空值比较为相等。

有一种方法可以使用元组语法,更准确地说是行值比较器。它比ANSI-SQL有点混乱,但仍然可以:

选择 ordid,prodid,数量 从…起 项目一 如果存在,请选择i.prodid,i.qty 横断 选择i2.prodid,i2.qty 来自项目i2 其中i2.ordid=365
它看起来很奇怪,但实际上它对于比较可为空的列非常有用,因为INTERSECT将空值比较为相等。

现在有什么意义吗?您的FROM in查询和子查询是相同的。因此,您的子查询基本上就是您所需要的。您实际使用的是不同的表吗?对不起,我想我遗漏了一些东西,没有子查询怎么做?对于这个特定的查询,我只使用1个表。我需要先得到prodid和ordid=365的数量,然后再查找值,我在这里找不到任何快捷方式..现在有什么意义吗?您的FROM in查询和子查询是相同的。因此,您的子查询基本上就是您所需要的。您实际使用的是不同的表吗?对不起,我想我遗漏了一些东西,没有子查询怎么做?对于这个特定的查询,我只使用1个表。我需要先得到prodid和quantity of ordid=365,然后再查找值,我在这里找不到任何快捷方式。理论上,可以在where和select中连接字段,但这会对性能造成很大影响。从提问的方式来看,我甚至不认为需要子查询。理论上,可以将where和select中的字段连接起来,但这会对性能造成很大影响。按照提问的方式,我认为甚至不需要子查询