2012-08-06 104 views
2

我有兩個表:tableA和tableB。我如何獲得tableA中的所有記錄,但不是tableB中的記錄?我對正確的方式感興趣,而不是解決方法。我嘗試使用左連接,然後添加where ID is not null。它有效,但我不確定這是否是正確的做法。2個SQL表之間的區別

回答

4
select * from tableA 
where id not in (select id from tableB) 

select * from tableA a 
left join tableB b on a.id = b.id 
where b.id is null 

兩者都是以獲取你的要求完全可以接受的方式。

+0

沒有加入的人應該會更快嗎?或者他們完全一樣?我總是被告知連接應該幾乎只用於顯示來自2個表格的數據,否則,使用select .. from ..在哪裏選擇... – Pacane 2012-08-06 17:14:58

+0

我認爲這取決於。我在我的數據庫的表上做了兩個查詢的'select select ...',第一個語句對'null'鍵做了全表掃描。第二個沒有。但是,如果性能是一個問題,我會建議使用'explain'運行這兩個查詢並查看差異。 – 2012-08-06 17:19:23

0

如果需要在頁面上顯示數據(編程),如果需要將數據從一個表移動到另一個表進行備份或其他類似目的,則必須使用連接,則需要sql比較工具。 首先你需要sql左連接。讓你的表格中的左一個,並把和爲B

select * from A 
left join B on A.id = B.id 
where b.id is null 
0

可以使用NOT EXISTS加入。我傾向於使用NOT EXISTS,因爲當列允許空值但沒有空值時,NOT IN的性能明顯劣於NOT EXISTS

Select * from table1 a 
    Where not exists (Select ID from table2 b where a.ID = b.ID) 

non-nullable列,您可以使用其中的哪個適合於您的情況作爲的行爲和NOT IN性能和NOT EXISTS是一樣的。

0

因爲你沒有給表架構讓我們假設有每個table.id1主鍵,ID2

你可以在左連接的幫助下完成。

SELECT * FROM表1左連接表2,其中ID2是空

注意,這不是一個實際的查詢只是一個提示讓你先走。