2012-11-09 130 views
1

我有三個表格:t1t2,t3。每一個都有IDname列。在t2t3中,在添加www.後插入字段名稱。我需要做的是:從t1中選擇所有不在t2t3中的記錄。如何連接1個表格與另外2個表格

我可以從t1t2檢索所需的記錄,然後t1t3另一個類似的查詢。我需要做的是在一個聲明中做出這一點。

下面的語句來檢索在t2的名稱,但不是在t1

select t1.name 
from db.t1 
LEFT JOIN db.t2 ON 
t2.name = concat('www.',t1.name) 
WHERE t2.name IS NULL; 

一個類似做是爲了檢索T1和T3的記錄。如何在一個聲明中做到這一點?

回答

2

嘗試通過使用UNION

select t1.name 
from db.t1 
     LEFT JOIN 
     (
      SELECT name FROM t2 
      UNION 
      SELECT name FROM t3 
     ) t ON t.name = concat('www.',t1.name) 
WHERE t2.name IS NULL; 

或使用LEFT JOIN仍然

select t1.name 
from db.t1 
     LEFT JOIN db.t2 
      ON t2.name = concat('www.',t1.name) 
     LEFT JOIN db.t3 
      ON t3.name = concat('www.',t1.name) 
WHERE t2.name IS NULL AND 
     t3.name IS NULL; 
+0

明智的性能,這是更好?我假設加入? –

+0

@ kmb385我會去兩個'LEFT JOIN'。我只是向OP展示了實現他所期望的不同方式。 :D –

+1

感謝您的回答,BTW我不是原始的海報。 +1爲解釋,即使我在比賽中有一匹馬:) –

0

只需再添加入

select t1.name 
from db.t1 
LEFT JOIN db.t2 ON 
t2.name = concat('www.',t1.name) 
LEFT JOIN db.t3 ON 
t3.name = concat('www.',t1.name) 
WHERE t2.name IS NULL and t3.name IS NULL; 
相關問題