【发布时间】:2018-05-16 23:13:09
【问题描述】:
这是一个令人费解的 SQL 任务。我想用查询来做,而不是用光标单步执行并用“硬方式”来做。
如果我有两个表 TableA 和 TableB,每个表都有一个分组列,如下所示:
TableA TableB
------------- -------------
id group id group
------ ------ ------ ------
1 D 1 X
2 D 2 X
3 D 3 Y
4 D 4 Y
4 E 5 Y
5 E 5 Z
5 F 6 Z
注意组名不同同名。
我想知道给定的 TableB 组是否完全由 ID 组成,这些 ID 在 TableA 的任何组中也分组在一起。 TableA 组可以拥有比 TableB 组更多的 ID,只要它具有与 TableB 组相同的所有 ID。 ID 可以在任一表中的多个组中。
从上面的表格中,我应该发现 TableB 中的组 X 匹配 TableA 中的组,但组 Y 和 Z 不匹配。
我尝试了许多不同的查询、子查询、递归 CTE。我只得到了错误的结果和头痛。真实的数据集要大得多,因此性能也应该被考虑在内。不幸的是,这意味着下面的答案中提出的交叉连接解决方案将不起作用。
这甚至可以用 SQL 实现吗?
【问题讨论】:
-
我最终选择了基于光标的解决方案。 (有时,光标是最好的答案!)