“MySQL”或“不工作”
我要执行此查询:“MySQL”或“不工作”,sql,mysql,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 …然
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
…然后工作正常-选择目标id为2的每一行。如果我用源代码替换目标代码,它也可以正常工作。问题是,我想选择目标或源ID为2的行作为示例,但是运行首先声明的查询select*FROM mail where tag_draft=0和target_ID=2或source_ID=2 groupby created DESC,无论有无内括号,都不会返回任何行。我不明白为什么这不起作用,除了我做了一些错误的或位
一些示例数据:
source_id target_id etc_fields
-------------------------------
2 12 blah
12 2 blah
2 14 blah
2 10 blah
2 2 blah
表中应显示上述所有行。不应显示的内容如下:
source_id target_id etc_fields
-------------------------------
10 8 ...
255 16 ...
4 12 ...
这里有一种方法,假设给定条件下不存在多个具有相同MAXcreated的行:
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
请确保按所选的每一列进行分组(聚合MAXcreated除外),选择*不行。是否可以尝试将其格式设置得更好一些?将查询放在自己的段落中,缩进4个空格,或选择并单击1010按钮。这将使其格式正确、颜色鲜艳,并且更易于阅读。您能否提供表定义和几行示例数据,以可复制的方式演示问题?这听起来可能很愚蠢,但您确定吗?如果删除GROUP BY子句,会有什么不同?您发布的查询是否与您正在运行的查询完全相同,或者你简化了吗?这看起来很有希望,尽管我是个白痴,并且没有把我的问题说清楚:我拥有的是“线程”,由一个thread\u id列表示,该线程中的所有行都是相同的。我也有线程的创建日期,同样如此。然而,不同的是“更新”字段——这是唯一的。你能改变你的查询,让它像我解释的那样运行吗?或者它已经运行了吗?还有,“m.”和“sm.”是什么意思?它们是不同的表还是什么的?它们只是邮件表的别名。如果更新的列是您想要的,那么在上面的查询中使用该列而不是创建的列还不够吗?@nos-可能是,但如果您理解的话,我想从每个线程中选择最新的帖子,而不是整个表?有点,但这与原始问题有很大的不同。我建议您发布一个新问题,包括实际的表结构和您想要的内容。