0

我希望有人可以帮助我解决我遇到的这个问题。我有一张客户表——我们称之为 C 表。我还有第二张不被调用的客户表——我们称之为 D 表。

我想从表 C 中提取所有需要的信息(姓名、地址、电话等),除非客户出现在表 D 中。

在下面显示的示例中,我希望返回除 John Doe (ID: 1) 和 Fred Savage (ID: 5) 之外的所有客户的数据

数据示例

我认为 aRIGHT OUTER JOIN可能适用于此,但我之前没有使用过这种类型的连接。

4

4 回答 4

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值),因为我认为这些更清楚地传达了意图。

于 2015-08-14T21:24:46.507 回答
2

用于NOT EXISTS执行此操作:

SELECT c.*
FROM tableC c
WHERE NOT EXISTS (
        SELECT *
        FROM tableD d
        WHERE c.customerID = d.customerid
        );
于 2015-08-14T21:18:23.113 回答
1
Select * from table.c where customer_id not in (select distinct customer_id from table.d);
于 2015-08-14T21:23:38.160 回答
-1

是的,你想要一个外部连接。试试这个:https ://technet.microsoft.com/en-US/library/ms187518(v=SQL.105).aspx

于 2015-08-14T21:05:11.590 回答