SQL包括相关表中不存在id的结果

时间:2014-08-27 11:29:26

标签: mysql sql join

我正在努力处理SQL查询。这种情况如下: -

我有2个表用户和结果: -

用户

  • user_id(PK)

结果

  • result_id
  • fk module_id

我正在尝试从结果表中选择没有模块1条目的所有用户。

我可以使用以下选项选择没有相应记录的所有用户: -

SELECT * 
FROM user u
LEFT JOIN results r 
    ON u.user_id = r.user_id
WHERE isnull(r.result_id);

但是,我不能为我的生活找出如何忽略Results表中模块ID不是1的所有行。

我需要子查询吗?

非常感谢任何帮助。

3 个答案:

答案 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)

希望这有效。