我想要做的是我有两个不同的表并通过列连接它们。我要查找的结果是检索第一个表中不存在的所有记录。我不记得sytax这样做了。以下是我到目前为止的情况:
SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, A.REVISED_DATE
FROM AIRPORT_CHECKLIST A, AIRPORT_CHECKLIST_SELECTED B
WHERE A.COMPANY = 'TOM'
AND A.ICAO <> B.ICAO
答案 0 :(得分:2)
可以尝试
SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, A.REVISED_DATE
FROM AIRPORT_CHECKLIST A
WHERE A.COMPANY = 'TOM'
AND A.ICAO NOT IN(SELECT ICAO FROM AIRPORT_CHECKLIST_SELECTED)
或另一种方式,如果A是“第一”表..
SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, A.REVISED_DATE
FROM AIRPORT_CHECKLIST A, AIRPORT_CHECKLIST_SELECTED B
WHERE A.COMPANY = 'TOM'
AND B.ICAO NOT IN(SELECT ICAO FROM AIRPORT_CHECKLIST)
答案 1 :(得分:0)
您需要使用右外连接并检查空值。
select
A.ICAO,
A.IATA,
A.AIRPORT_NAME,
A.CITY,
A.COUNTRY,
A.REVISED_DATE
from
airport_checklist a
right outer join
airport_checklist_selected b
on
a.icao = b.icao
where
a.icao is null
当然,正如djacobson的评论指出的那样,因为这只返回表A为空的表A,它将返回一组空值!
答案 2 :(得分:0)
要查找没有匹配项的所有记录,请执行左内连接(为左侧表中的每条记录返回一条记录,即使它在右侧表中没有匹配项)并检查右侧表格字段中的空值。假设您正在查找未选中的'TOM'
核对清单中的机场:
SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, A.REVISED_DATE
FROM AIRPORT_CHECKLIST A LEFT JOIN AIRPORT_CHECKLIST_SELECTED B
ON A.ICAO = B.ICAO
WHERE A.COMPANY = 'TOM' AND B.ICAO IS NULL;
测试B.ICAO IS NULL
仅选择内部联接已插入的行,以表示没有匹配A
行的B
行