我正在努力处理SQL查询。这种情况如下: -
我有2个表用户和结果: -
用户
结果
我正在尝试从结果表中选择没有模块1条目的所有用户。
我可以使用以下选项选择没有相应记录的所有用户: -
SELECT *
FROM user u
LEFT JOIN results r
ON u.user_id = r.user_id
WHERE isnull(r.result_id);
但是,我不能为我的生活找出如何忽略Results表中模块ID不是1的所有行。
我需要子查询吗?
非常感谢任何帮助。
答案 0 :(得分:1)
这就是你想要的:
SELECT *
FROM user U
LEFT OUTER JOIN results R ON R.user_id = U.user_id
WHERE R.result_id IS NULL
OR(R.result_id IS NOT NULL AND R.module_id <> 1)
希望这会对你有所帮助。
答案 1 :(得分:1)
如果您的要求是将所有用户加入他们的结果,除非结果恰好是模块#1,您可以使用:
SELECT *
FROM user u
LEFT JOIN results r ON
u.user_id = r.user_id AND
r.module_id != 1;
我不清楚你是否想要所有用户和相关的非模块1结果,或者你只是在寻找那些没有任何模块1入口的用户。如果这就是你要找的东西,那么使用NOT IN(或者不是EXISTS,这会更快 - 不记得MySQL是否支持它)将是解决方案,例如,
SELECT *
FROM user u
WHERE u.user_id NOT IN
(
SELECT user_id
FROM results
WHERE module_id = 1
);
答案 2 :(得分:0)
如果是这个mysql那么试试这个
SELECT *
FROM user U
LEFT OUTER JOIN results R ON R.user_id = U.user_id
WHERE R.result_id IS NULL OR (R.result_id IS NOT NULL AND R.module_id != 1)
希望这有效。