我希望有人可以帮我解决这个问题。 我有一个客户表 - 让我们称之为表C.我有第二个客户表,不能被称为 - 我们称之为表D.
我想从表C中提取所有需要的信息(姓名,地址,电话等),除非客户出现在表D中。
在下面显示的示例中,我希望为除John Doe(ID:1)和Fred Savage(ID:5)之外的所有客户返回数据
我认为RIGHT OUTER JOIN
可能适用于此处,但我之前没有使用过这种类型的联接。
答案 0 :(得分:2)
使用NOT EXISTS
执行此操作:
SELECT c.*
FROM tableC c
WHERE NOT EXISTS (
SELECT *
FROM tableD d
WHERE c.customerID = d.customerid
);
答案 1 :(得分:2)
如果你想使用一个连接,那么它就是你想要的左连接,在d表中有一个空值的过滤器。右连接会得到d表中的所有行,加上c表中匹配的行 - 与你想要的相反,但是如果你已经切换了表,那么你会得到相同的结果,所以这样:
select c.* from c
left join d on c.CustomerID = d.CustomerID
where d.CustomerID is null
相当于:
select c.* from d
right join c on c.CustomerID = d.CustomerID
where d.CustomerID is null;
我个人更喜欢使用相关的not exists
查询或not in
(但要注意null
值),因为我认为这些更清楚地传达了意图。
答案 2 :(得分:1)
Select * from table.c where customer_id not in (select distinct customer_id from table.d);
答案 3 :(得分:-1)
是的,你想要一个外部联接。 试试这个:https://technet.microsoft.com/en-US/library/ms187518(v=SQL.105).aspx