如果元素出现在一列而不是另一列中,您如何检查查询?例如,我有2列有一些ID
**Route**
+---------+--------------+
| StartID | DestinationID|
+---------+--------------+
| 9016 | 1015 |
| 9015 | 7628 |
| 1015 | 1500 |
| 1023 | 1500 |
| 1023 | 1015 |
| 7628 | 9022 |
| 7628 | 1500 |
| 6700 | 9016 |
| 6700 | 1500 |
| 9015 | 9022 |
+---------+--------------+
如何返回第一列中出现但未出现在第二列中的任何ID?感谢
编辑:查询实际上要我返回不同ID的数量,出于某种原因我放入
SELECT DISTINCT StartID
FROM Route R WHERE NOT EXISTS (SELECT 1 FROM Route I WHERE I.DestinationID = R.StartID);
结果是:
+---------+
| StartID |
+---------+
| 1023 |
| 6700 |
| 9015 |
+---------+
但是当我放入
时SELECT DISTINCT count(StartID)
FROM Route R WHERE NOT EXISTS (SELECT 1 FROM Route I WHERE I.DestinationID = R.StartID);
结果是:
+----------------+
| count(StartID) |
+----------------+
| 6 |
+----------------+
有谁知道这是为什么以及如何编写查询以返回正确的结果? (3)谢谢!
答案 0 :(得分:1)
您可以使用not exists
。
select distinct startid
from tablename t
where not exists (select 1 from tablename where t.startid=destinationid)
答案 1 :(得分:1)
使用not exists()
:
select *
from route r
where not exists (
select 1
from route i
where i.DestinationId = r.StartId
)
答案 2 :(得分:0)
您可以使用自联接,并且可以返回连接不成功的所有行:
select r.StartID
from
route r left join route b
on r.StartID = b.DestinationId
where
b.DestinationId is null