SQL - 如何检查元素是否出现在一列中而不出现在另一列中

时间:2017-03-02 21:33:53

标签: mysql sql

如果元素出现在一列而不是另一列中,您如何检查查询?例如,我有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)谢谢!

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