2012-11-09 92 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; 
相关问题