如何在mysql查询中使用not in或not exist进行内部连接?

ehxuflar  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(458)

我有一些这样的数据给用户

id | username | email
1  | test     | test@test.com
2  | om       | test2@test2.com
3  | aa       | test3@test3.com

我有这样的数据

id | username | bio
1  | test     | test
2  | om       | test2

所以,我想使用not in with inner join来显示数据 where user.username not in biodata.username 我试着这样做,但这是错误的

select user.*, biodata.* from user inner join biodata on user.username = biodata.username where user.username not in biodata.username;

那么,怎么用呢?

ct3nt3jp

ct3nt3jp1#

这就需要共同点 LEFT JOIN ... IS NULL 图案。

SELECT u.id, u.username, u.email
  FROM user u
  LEFT JOIN biodata b ON u.username = b.username
 WHERE b.id IS NULL

这个 LEFT JOIN 操作保留中的所有行 user ,无论是否有匹配项 biodata . (相比之下,一个普通的 JOIN 将从 user 那没有火柴。)那 b.id IS NULL 操作筛选出具有匹配项的行。

zphenhs4

zphenhs42#

她想要biodata表中不存在的名称(user.username)。left join保留表用户的所有记录和表biodata的匹配记录(left join中有很好的解释)。where子句搜索biodata中不存在的用户名:

SELECT u.id, u.username, u.email 
FROM user u 
LEFT JOIN biodata bd 
ON u.username = bd.username 
WHERE u.username 
NOT IN (select username from biodata);

正确的输出是:

id | username | email
3  |    aa    | test3@test3.com

我相信你想做一个“例外”。但是一些像mysql这样的sgbd没有这个选项。

相关问题