具有多个连接和排除的 SQL 查询

Posted

技术标签:

【中文标题】具有多个连接和排除的 SQL 查询【英文标题】:SQL Query with Multiple Joins and exclusions 【发布时间】:2015-09-09 13:45:00 【问题描述】:

我有两个表 Table A=Orders 和 Table B=OrderDetails,它们由唯一的 order_no 连接。

对于 Order TableA 中的每个 ORDER_no,可以在 OrderDetails 表 B 中附加多行。基本上,如果表 B 中的任何行等于特定名称,我需要一个查询来排除两个表中的整个 Order。

例子:

如果 Order 1234 在 OrderDetails TableB 中有 5 行,其中一行 = 'NOTE',那么我希望将整个 ORder 1234 从结果中排除。目前它只排除了该行但显示了其他行?

【问题讨论】:

坚持使用相同的名称,即 Orders 和 OrderDetails,或者 TableA 和 TableB。目前的组合太混乱了。 添加一些示例代码 【参考方案1】:

这是你想要的吗?它获取没有“备注”详细记录的订单:

select o.*
from orders o
where not exists (select 1
                  from orderdetails od
                  where od.orderid = o.orderid and od.name = 'Notes'
                 );

如果你想要所有的详细记录,你可以在外部查询中加入orderdetails

【讨论】:

是的,这似乎可行,现在我只需要调整其他表的附加连接即可。希望我现在可以添加复杂的连接,因为我只选择那些没有注释的订单。谢谢。 工作完美,感谢您的快速回复和破译我的问题,我是新手 :)

以上是关于具有多个连接和排除的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

具有多个 postmeta 左连接的 Wordpress 自定义 SQL 查询

具有多个左外连接的 SQL Server 查询挂起

如何使用具有多个连接的 SQL 查询并使用休眠计数

具有多个或条件的sql server外连接

SQL查询;如果子记录 = 条件则排除记录

存在匹配时排除不匹配行的 SQL 多对多连接