反转内部联接查询

时间:2017-03-24 18:53:38

标签: mysql join

好吧所以我试图扭转这个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

1 个答案:

答案 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子句找到任何匹配的行时,将其从输出中丢弃。