Sql server 标记2个数据集之间缺少记录
标题并不能很好地解释这个问题,因此我将举一个例子: 表1(OrderNum,OrderLine)-所有已创建的订单行。 表2(OrderNum,OrderLin)-要立即打印的订单行 表2在表1中始终有匹配项,因为它是根据表1填充的,但有时表1中的订单中缺少一行。例如: 表1:Sql server 标记2个数据集之间缺少记录,sql-server,Sql Server,标题并不能很好地解释这个问题,因此我将举一个例子: 表1(OrderNum,OrderLine)-所有已创建的订单行。 表2(OrderNum,OrderLin)-要立即打印的订单行 表2在表1中始终有匹配项,因为它是根据表1填充的,但有时表1中的订单中缺少一行。例如: 表1: OrderNum, OrderLine 100, 1 100, 2 100, 3 100, 4 101, 1 102, 1 102, 2 表2: OrderNum, OrderLine 100, 1 100, 2 10
OrderNum, OrderLine
100, 1
100, 2
100, 3
100, 4
101, 1
102, 1
102, 2
表2:
OrderNum, OrderLine
100, 1
100, 2
100, 4
101, 1
在本例中,我需要打印订单100的所有4行,第3行标记为缺失,以及订单101的所有行,但订单102中没有一行。显然,我的桌子比这个大得多,但这总结了我的困境。我无法控制这两个表的填充方式
如果我在OrderNum和OrderLine上将表2连接到表1,那么我也会得到OrderNum 102,我不希望这样。如果我只在OrderNum上加入,那么表2中的每一行都会得到100次的重复,我如何找到没有重复的1记录
希望这对我的问题有意义。我曾尝试过谷歌搜索,但这些术语太通用了,我得到了许多不相关的结果。使用
左连接和存在()
rextester演示:
返回:
+----------+-----------+---------+
| OrderNum | OrderLine | Missing |
+----------+-----------+---------+
| 100 | 1 | |
| 100 | 2 | |
| 100 | 3 | Flag |
| 100 | 4 | |
| 101 | 1 | |
+----------+-----------+---------+
使用左连接和存在()
rextester演示:
返回:
+----------+-----------+---------+
| OrderNum | OrderLine | Missing |
+----------+-----------+---------+
| 100 | 1 | |
| 100 | 2 | |
| 100 | 3 | Flag |
| 100 | 4 | |
| 101 | 1 | |
+----------+-----------+---------+
在OrderNum列和OrderLine列上都应该使用table1LEFT JOIN Table2。在OrderNum列和OrderLine列上都应该使用table1LEFT JOIN Table2。我总是忘记Exists可以引用外部查询,我曾经知道它。不管怎样,谢谢你,工作得很好@蚯蚓很乐意帮忙!我总是忘记存在可以引用的外部查询,我知道它一次。不管怎样,谢谢你,工作得很好@蚯蚓很乐意帮忙!