使用SQL连接表

时间:2011-09-09 21:58:24

标签: sql

我想要做的是我有两个不同的表并通过列连接它们。我要查找的结果是检索第一个表中不存在的所有记录。我不记得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

3 个答案:

答案 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