实际上SQL忽略了having子句中的where条件,我在那里填什么并不重要,它总是找到“所有”的结果。
SELECT `status`, count(*) AS count
FROM `wa_re_jo`
WHERE
EXISTS (
SELECT *
FROM `ad_ac_wa`
WHERE `plattform` = 'adwords'
AND `wa_re_jo`.`watchlist_id` = `ad_ac_wa`.`id`
AND EXISTS (
SELECT *
FROM `ad_cu_ac`
WHERE `ad_ac_wa`.`external_id` = `ad_cu_ac`.`externalId`
AND EXISTS (
SELECT *
FROM `ç`
WHERE `ad_cu_ac`.`id` = `ad_cu_ac`.`adwords_customer_account_id`
AND `startDate` <= '2023-04-04'
AND `endDate` + interval 1 DAY >= '2023-04-04'
)
)
)
AND `created_at` LIKE '2023-04-04%'
OR `updated_at` LIKE '2023-04-04%'
GROUP BY `status`
我试图改变条件的值和顺序。
1条答案
按热度按时间nue99wik1#
除了**在发布的代码中任何地方都没有
HAVING
子句,**问题几乎肯定是OR
条件表达式:你可能需要一组括号,像这样:
在原始代码中,只匹配
OR
子句的右侧就足以匹配整个WHERE
子句。也就是说,就像您这样编写WHERE
子句一样:我要补充一点,由于文化/国际化问题,使用字符串表达式进行日期比较几乎总是最慢和最容易出错的方法。通过重新使用真实日期表达式进行比较,而不是现在使用的假日期表达式,您将获得更好更快的结果。
最后,当我看到像这样的多个级别的
EXISTS()
条件时,这通常是一个信号,应该重新编写以使用JOIN
。