我正在执行以下查询:
SELECT SQL_CALC_FOUND_ROWS uniqueid, start
FROM sometable
LEFT JOIN log ON
sometable.uniqueid = log.anid AND (log.info='someinfo' or log.info='otherinfo')
WHERE `moreInfo` = 1 AND `type` = 'myType'
AND (`channel` LIKE 'ACHANNEL/%' or `channel` LIKE 'OTHERCHANNEL\/%')
AND `start` > '2019-01-22 00:00:00' AND `start` < '2019-01-22 23:59:59'
GROUP BY uniqueid
但是,这部分似乎不起作用:
AND (`channel` LIKE 'ACHANNEL%' or `channel` LIKE 'OTHERCHANNEL%')
我希望这给我所有以ACHANNEL /开头的频道,或以OTHERCHANNEL /开头的频道,相反,它总是给我以OTHERCHANNEL /开头的结果。
OR似乎不起作用。
有帮助吗?
答案 0 :(得分:3)
您的查询应该在做您想要的。如果您缺少行,那么模式可能根本不匹配。
我确实有一些建议:
SELECT SQL_CALC_FOUND_ROWS t.uniqueid, MIN(start) as start
FROM sometable t LEFT JOIN
log l
ON t.uniqueid = l.anid AND l.info in ('someinfo', 'otherinfo')
WHERE t.`moreInfo` = 1 AND
t.`type` = 'myType' AND
(t.`channel` LIKE 'ACHANNEL/%' or t.`channel` LIKE 'OTHERCHANNEL/%') AND
t.`start` > '2019-01-22' AND `start` < '2019-01-23'
GROUP BY t.uniqueid;
请注意,我已经限定了 all 列名,并假设WHERE
中的所有列引用均引用sometable
而不是log
。否则,LEFT JOIN
会变成INNER JOIN
。
注意:
OR
简化了与IN
的多重比较。start
列已变成聚合函数。\
已被删除。不需要任何带有正斜杠的转义符。答案 1 :(得分:2)
您没有逃脱第一个条件:
AND (channel LIKE 'ACHANNEL\/%' or channel LIKE 'OTHERCHANNEL\/%')