Sql 自联接表中不存在的元组
我正在玩一个“解决”活动网络的算法——这是一门项目管理课程。该算法在纸上工作,但为了用计算机解决它,我需要一个聪明的查询,在自连接表中查找不存在的元组 假设活动如下: A到B,A到C,B到D,C到D 我使用的名为“CPM”的表格填充如下:Sql 自联接表中不存在的元组,sql,Sql,我正在玩一个“解决”活动网络的算法——这是一门项目管理课程。该算法在纸上工作,但为了用计算机解决它,我需要一个聪明的查询,在自连接表中查找不存在的元组 假设活动如下: A到B,A到C,B到D,C到D 我使用的名为“CPM”的表格填充如下: +----+----------+--------+---------+ | ID | Fromnode | Tonode | Counter | +----+----------+--------+---------+ | 1 | A | B
+----+----------+--------+---------+
| ID | Fromnode | Tonode | Counter |
+----+----------+--------+---------+
| 1 | A | B | 0 |
+----+----------+--------+---------+
| 2 | A | C | 0 |
+----+----------+--------+---------+
| 3 | B | D | 0 |
+----+----------+--------+---------+
| 4 | C | D | 0 |
+----+----------+--------+---------+
我试图编写一个查询,返回所有没有相应“tonodes”的“fromnodes”。这是我写的
select id, fromnode
from cpm
where counter = 0
and not exists (select 'X'
from cpm cpm1
where tonode = cmp1.fromnode)
但这将返回所有四个元组,而不仅仅是前两个元组
使用“notexists”的查询很难理解,而自连接只会让事情变得更糟。问题应该是什么?顺便说一句,我用的是Firebird,但我认为这不是问题所在
蒂亚,
否'am尝试外部联接:从cpm中选择a.id,a.fromnode作为左外部联接cpm作为b在a.fromnode=b.t节点上,其中b.fromnode为空。我不知道是否接受您的答案,因为它给出了错误的结果,但至少指出了正确的结果,或者可能是我误导了您。您的查询返回“D”,而不是“A”。下面是正确的查询-选择a.id,a.fromnode from cpm a左外连接cpm b on a.fromnode=b.t其中b.fromnode为null@Noam:他的想法是正确的,他解决了问题,或者向你展示了如何解决问题,我认为他只是在问题本身上走得太快了。谢谢你接受。哦,我看错了问题。我确实认为你想要最后两行——没有正确地阅读,而不仅仅是前两行。谢谢你的更正。我想我不明白这个短语没有对应的音调。