【问题标题】:Joining not included in table加入未包含在表中
【发布时间】:2021-03-25 15:12:18
【问题描述】:
我想请你帮忙。
我有两张桌子。在 tab1 之一中,我有 client_num,然后是个人数据。我想将 tab1 与 tab2 一起加入,client_nums 也在哪里,但一个客户编号可以在更多行上。此 tab2 中的第二列是写为数字 1-5 的产品。
标签1
客户编号;性别
1; M
2; F
3; F
4; M
tab2
客户编号;产品
1; 2
1; 3
1; 4
2; 1
2; 2
2; 3
3; 4
3; 1
现在我只想要没有产品编号 4 的客户
你能帮我解决这个问题吗?谢谢
【问题讨论】:
标签:
mysql
sql
select
datatables
nested
【解决方案1】:
使用not exists:
select c.*
from clients c
where not exists (select 1
from client_products cp
where cp.client_num = c.client_num and
cp.product = 4
);
【解决方案2】:
使用以下查询:SELECT tab1.* FROM tab1 WHERE tab1.client_num NOT IN (SELECT DISTINCT tab2.client_num FROM tab2 WHERE tab2.product = 4);
请注意,这也会输出在 tab2 中没有任何条目的客户记录。即它将在您提供的示例数据中输出 2 和 4。
如果您打算只列出在 tab2 中关联产品的客户,您可以使用此查询:SELECT DISTINCT tab1.* FROM tab1 JOIN tab2 USING(client_num) WHERE tab1.client_num NOT IN (SELECT DISTINCT tab2.client_num FROM tab2 WHERE tab2.product = 4);
根据示例数据,第二个查询将仅输出 2。