好吧所以我试图扭转这个INNER JOIN查询。我想选择验证表中没有字段的所有帐户
我试过这种方式(尝试这是一次尝试)但失败了
SELECT users.*,
user_activations.user_id as user_ID
FROM users
INNER JOIN user_activations ON
user_activations.user_id = users.ID
WHERE user_activations.user_id IS NULL
答案 0 :(得分:1)
你可以通过几种方式做到这一点。请注意使用sql别名来缩短代码。
1)在LEFT JOIN
PK(或非空列)上使用IS NULL
user_activations
条件,称为ANTI-JOIN
SELECT
u.*
FROM users u
LEFT JOIN user_activations ua ON
ua.user_id = u.ID
WHERE ua.user_id IS NULL
2)使用NOT EXISTS
SELECT
u.*
FROM users u
WHERE NOT EXISTS (
SELECT *
FROM user_activations ua
WHERE ua.user_id = u.ID
)
请注意,在(1)选项中,我们使用LEFT JOIN
结合WHERE
条件,该条件应用于整个连接数据集,并有效删除与{{1}匹配的行(两个表中的数据通过公共列值的交集)。
在(2)选项中,我们有一个使用INNER JOIN
关键字的矛盾的EXISTS
运算符,当根据子查询中的NOT
子句找到任何匹配的行时,将其从输出中丢弃。