【发布时间】:2021-04-21 15:11:11
【问题描述】:
我遇到了一个问题,我去了表 B 中的所有记录和表 A 中的任何不匹配记录,但它带回了表 A 中的匹配记录。还有另一个左连接到另一个表,该表被引入仅供参考。
我正在使用 SSMS v18。
所以 ID 将在表 A 和表 B 上。在 A 和 B 上会有多个此 ID 的记录,但如果日期/时间和 ID 在表 A 和表中相同,我不希望重复记录B.
例如- 我已经简化了我在下面使用的查询。
Select
a.id
a.datetime
a.emp_id
c.team_id
From
table_a as a
Left Join
table_b as b On a.id = b.id
And a.datetime <> b.datetime
Left Join
table_c On a.emp_id = c.emp_id
由于没有 NULL,我认为我不能使用它。我不相信完整的外部联接会返回我需要的东西。
有没有办法解决这个问题?联合查询解决方案将不起作用,因为表 A 和表 B 没有相同的列/列名。
如果需要更多信息,请告诉我。
编辑 - 附加 抱歉,但现在要求发生了变化,我现在需要删除匹配的记录,而不是只删除重复项。有没有办法解决这个问题?
其他 - 数据示例
表 A:
+----+------------------+--------+
| Id | Datetime | emp_id |
+----+------------------+--------+
| 1 | 20/04/2021 10:30 | a |
| 1 | 20/04/2021 11:15 | a |
| 2 | 21/04/2021 12:10 | b |
| 2 | 21/04/2021 13:20 | b |
| 2 | 22/04/2021 15:30 | c |
| 3 | 23/04/2021 09:45 | d |
| 4 | 23/04/2021 14:35 | e |
+----+------------------+--------+
表 B:
+----+------------------+-------------+
| Id | Datetime | other_field |
+----+------------------+-------------+
| 1 | 20/04/2021 10:30 | x |
| 2 | 21/04/2021 13:20 | y |
| 4 | 23/04/2021 14:35 | z |
+----+------------------+-------------+
所需的输出:
+----+------------------+--------+---------+
| Id | Datetime | emp_id | team_id |
+----+------------------+--------+---------+
| 1 | 20/04/2021 11:15 | a | team_01 |
| 2 | 21/04/2021 12:10 | b | team_02 |
| 2 | 22/04/2021 15:30 | c | team_01 |
| 3 | 23/04/2021 09:45 | d | team_02 |
+----+------------------+--------+---------+
因此,表 B 中的重复 ID 和日期时间不会显示在最终输出中(不管任何其他字段)
【问题讨论】:
-
样本数据和期望的结果会有所帮助。例如,您的问题描述没有提到 TableC。
-
如果您可以为每个表创建示例数据,那么您就可以针对各种情况展示您想要的行为和结果。目前来说太笼统和模棱两可了……stackoverflow.com/help/minimal-reproducible-example
标签: sql-server ssms