我有一些这样的数据给用户
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;
那么,怎么用呢?
2条答案
按热度按时间ct3nt3jp1#
这就需要共同点
LEFT JOIN ... IS NULL
图案。这个
LEFT JOIN
操作保留中的所有行user
,无论是否有匹配项biodata
. (相比之下,一个普通的JOIN
将从user
那没有火柴。)那b.id IS NULL
操作筛选出具有匹配项的行。zphenhs42#
她想要biodata表中不存在的名称(user.username)。left join保留表用户的所有记录和表biodata的匹配记录(left join中有很好的解释)。where子句搜索biodata中不存在的用户名:
正确的输出是:
我相信你想做一个“例外”。但是一些像mysql这样的sgbd没有这个选项。