我有一个场景,其中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)
这是因为用户名中两个表中的相关字段。
是否可以将这两个查询组合在一起,以便将所有没有个人资料或个人资料不完整的用户读作选择?
这可能非常简单,但我只是没有连接点。
答案 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