问题描述
|
我有一个查询
SELECT date,SUM(cimpression) AS cimp,SUM(cclick) AS cclick
FROM stdaily
WHERE date BETWEEN :start AND :end
AND (id = 21 AND id = 32 AND id = 12 AND id = 33)
GROUP BY date
ORDER BY date ASC;
此查询仅需要返回ID等于21、32、12和33的结果,但返回的结果不包含那些特定ID的结果,不确定到底是什么错误?有什么建议吗?
解决方法
我认为您正在寻找的是:
SELECT date,SUM(cimpression) AS cimp,SUM(cclick) AS cclick
FROM stdaily
WHERE date BETWEEN :start AND :end
AND id in (21,32,12,33)
GROUP BY date
ORDER BY date ASC;
这将返回结果,该结果的ID与in
括号中包含的ID相同。
,id = 21 AND id = 32 AND id = 12 AND id = 33
应该
id = 21 OR id = 32 OR id = 12 OR id = 33
,您没有指定他应该在哪里检查那些ID,并且传递ID的方式也是错误的
WHERE date BETWEEN :start AND :end AND (id = 21 AND id = 32 AND id = 12 AND id = 33 )
应该是这样的:
SELECT date,SUM(cclick) AS cclick
FROM stdaily
WHERE date BETWEEN :start AND :end AND id IN (21,33 )
GROUP BY date
ORDER BY date ASC
,我不知道您的数据的结构,但我很惊讶这会返回任何结果。 id如何同时为21和32?例如,如果我使用
SELECT * FROM users WHERE 1=1 AND (id = 10 AND id = 11);
即使有ID为10和11的用户,我也不会得到结果。
您应该使用OR或更好的IN(21,33)
,您的查询不正确,因为ID不能同时包含所有这些值:
id = 21 AND id = 32 AND id = 12 AND id = 33
先前的条件失败,结果为NULL。
尝试这个:
id = 21 OR id = 32 OR id = 12 OR id = 33