MySQL“OR”无效

时间:2010-09-28 20:40:33

标签: sql mysql

我想做这个查询:

  SELECT * 
    FROM mail 
   WHERE tag_draft = 0 
     AND (target_id = 2 OR source_id = 2) 
GROUP BY created DESC`

...但它不返回任何行。现在,如果我执行此查询:

  SELECT * 
    FROM mail 
   WHERE tag_draft = 0 
     AND target_id = 2 
GROUP BY created DESC

...然后它工作正常 - 选择target_id为2的每一行。如果我将target_id替换为source_id,它也可以正常工作。问题是,我想选择目标 OR 源ID为2的行(此处以2为例),但是先运行查询

({{1带或不带内括号的

,不返回任何行。我无法弄清楚为什么这不起作用,除了我对OR位做错了。

一些示例数据:

SELECT * FROM mail WHERE tag_draft=0 AND (target_id=2 OR source_id=2) GROUP BY created DESC

以上所有行都应显示在表格中。不应该显示的是:

source_id target_id etc_fields
-------------------------------
2         12        blah
12        2         blah
2         14        blah
2         10        blah
2         2         blah

1 个答案:

答案 0 :(得分:1)

这是一种方法,假设对于给定条件,存在不超过一行具有相同MAX(已创建)的行:

SELECT m.* FROM mail m WHERE m.tag_draft=0 AND (m.target_id=2 OR m.source_id=2) AND
  m.created = (SELECT MAX(created) FROM mail sm 
       WHERE sm.tag_draft=0 AND (sm.target_id=2 OR smsource_id=2))

或者只是

 SELECT m.id,m.target_id,m,m.source_id,MAX(created) FROM mail m 
    WHERE m.tag_draft=0 AND (m.target_id=2 OR m,source_id=2) 
  GROUP BY m.id,m.target_id,m.source_id

确保您选择的每个列都是GROUP BY,除了聚合(MAX(已创建)),SELECT *不会这样做。