我有三个表:t1
,t2
,t3
。每个人都有ID
和name
列。在t2
和t3
中,添加www.
后会插入字段名称。我需要做的是:选择t1
中不在t2
或t3
的所有记录。
我可以从t1
和t2
检索所需的记录,然后检索t1
和t3
的其他类似查询。我需要做的是在一个声明中做到这一点。
以下语句检索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检索记录。如何在一个声明中做到这一点?
答案 0 :(得分: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;
答案 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;