检查关系是否存在

时间:2018-07-20 15:59:20

标签: mysql sql

我有一个场景,其中users表中的用户在profiles表中具有配置文件。

我正在检查用户是否已使用此查询填写特定字段:

SELECT users.displayName 
FROM `users` 
INNER JOIN profiles 
ON users.username = profiles.user_username 
WHERE (skills IS NULL OR skills = '') OR (background IS NULL OR background = '');

然后,我使用此查询来检查用户是否确实具有个人资料:

SELECT *
FROM users
WHERE users.username NOT IN (SELECT user_username FROM profiles)

这是因为用户名中两个表中的相关字段。

是否可以将这两个查询组合在一起,以便将所有没有个人资料或个人资料不完整的用户读作选择?

这可能非常简单,但我只是没有连接点。

3 个答案:

答案 0 :(得分:0)

您可以使用左连接并为个人资料添加che。用户名为

SELECT users.displayName 
FROM `users` 
LEFT  JOIN profiles ON users.username = profiles.user_username 
WHERE ( (skills IS NULL OR skills = '') OR (background IS NULL OR background = '') )
and profiles.user_username is null 

答案 1 :(得分:0)

使用not exists

select u.*
from users u
where not exists (select 1
                  from profiles p
                  where p.user_username = u.username and
                        p.skills <> '' and
                        p.background <> ''
                 );

答案 2 :(得分:0)

SELECT * FROM (

SELECT users.displayName 
FROM `users` 
INNER JOIN profiles 
ON users.username = profiles.user_username 
WHERE (skills IS NULL OR skills = '') OR (background IS NULL OR background = '');

UNION

SELECT *
FROM users
WHERE users.username NOT IN (SELECT user_username FROM profiles)
) x INNER JOIN