【发布时间】:2014-02-26 19:09:49
【问题描述】:
我使用 SQL Server 2008 数据库。
我有两个表,列如下:
Table A:
request_id|order_id|e-mail
100 |2567 |jack@abc.com
100 |4784 |jack@abc.com
450 |2578 |lisa@abc.com
450 |8432 |lisa@abc.com
600 |9032 |john@abc.com
600 |9033 |john@abc.com
Table B 也有 id 和 order_no 列以及许多其他列:
Table B:
request_id|order_id|e-mail
100 |2563 |oscar@abc.com
300 |4784 |peter@abc.com
600 |9032 |john@abc.com
650 |2578 |bob@abc.com
850 |8432 |alice@abc.com
如您所见,表 A 中的给定 request_id 可以出现多次(见 100 和 450 条记录)
我需要查找表 A 中的所有记录,这些记录在表 B 中不存在 order_id,但具有相等的 request_id 列值。
对于上面的例子,我希望是这样的:
Output:
request_id|order_id|e-mail
100 |2567 |jack@abc.com
100 |4784 |jack@abc.com
450 |2578 |lisa@abc.com
450 |8432 |lisa@abc.com
600 |9033 |john@abc.com
如您所见,表 A 中的上述记录在表 B 中不存在。此条件仅满足 order_id=600 的记录
我创建了 T-SQL 查询的草图:
select
D.request_id, D.order_id
from
table A AS D
where
D.request_id = 600
and D.order_id not in (select M.order_id
from table B AS M
where M.request_id = 600)
不幸的是,我不知道如何为所有request_id 转换我的查询。第一个想法是使用 while 循环遍历表 A 中的所有 request_id,但在 SQL 世界中似乎并不聪明。
感谢您的帮助
【问题讨论】:
标签: sql database sql-server-2008 tsql