如何在mysql查询中与not in或not存在进行内连接?

Adr*_*ama 3 mysql

我有一些这样的用户数据

id | username | email
1  | test     | test@test.com
2  | om       | test2@test2.com
3  | aa       | test3@test3.com
Run Code Online (Sandbox Code Playgroud)

我有这样的数据用户生物数据

id | username | bio
1  | test     | test
2  | om       | test2
Run Code Online (Sandbox Code Playgroud)

所以,我想使用 not in 与内连接来显示数据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;
Run Code Online (Sandbox Code Playgroud)

那么,如何使用它呢?

O. *_*nes 5

这需要共同的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
Run Code Online (Sandbox Code Playgroud)

LEFT JOIN操作保留 中的所有行user,无论它们在 中是否有匹配项biodata。(相比之下,普通操作JOIN会抑制user不具有匹配项的行。)该操作会过滤掉具有b.id IS NULL匹配项的行。