【问题标题】:Matching multiple columns in a nested query匹配嵌套查询中的多个列
【发布时间】:2022-01-18 02:33:35
【问题描述】:

我正在尝试进行嵌套查询,其中我从多个列返回值并将这些值与另一列中的值匹配。类似于下面的代码(这是为了工作,所以我不能把确切的代码放在这里)

select *
from store1
where (orderNum, customer, total) not in (
select orderNum, customer, total from store2)

当我尝试运行代码时,我得到了错误:

在预期条件的上下文中指定的非布尔类型表达式,靠近 ','。

有没有办法做到这一点是SQL Server。我知道使用连接是一种选择,但我现在更愿意避免这种情况。感谢您的帮助!

【问题讨论】:

  • 你试图避免加入的理由是什么?它是一个普通的 SQL 工具...NOT EXISTS 可能是您想要的。
  • 在这一点上,我对连接的理解不足以将其实施到解决方案中。特别是这个查询已经使用的多个连接。为了开发截止日期,我一直在寻找另一种解决方案,但随着我对 SQL 的了解越来越多,我绝对愿意更新查询以使其更清晰。
  • 支点:INNOT IN,还有EXISTS,都是连接类型,特别是半连接

标签: sql sql-server tsql


【解决方案1】:

SQL Server 不支持这样的表构造函数,但还有很多其他方法可以做到这一点。我的首选方法是NOT EXISTS

SELECT * FROM dbo.store1
  WHERE NOT EXISTS 
  (
     SELECT 1 FROM dbo.store2
     WHERE store1.orderNum = store2.orderNum
       AND store1.customer = store2.customer
       AND store1.total = store2.total
  );

其他方法见:

【讨论】:

  • 行得通!非常感谢您的帮助!
【解决方案2】:

"count" 返回单个值,运行速度很快。容易理解。

select *
from store1
where 
(select count(*) from store2 where store2.orderNum=store1.orderNum and store2.customer=store1.customer and store2.total=store1.total)=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多