尝试清理一个长查询我已经提出了一个修改过的版本,但现在带有某些参数的旧查询返回6行,但我的版本没有返回。我一直在盯着我的眼睛发现差异,却找不到任何东西。以下是两个版本中具有相同参数集的WHERE
子句:
丑陋(但工作)版本:
SELECT ...
FROM table as a
WHERE 1=1
and a.title LIKE '%Manager%'
and a.status='Approved'
and (a.effected_date<=now())
and (
(DATE_ADD(a.effected_date, INTERVAL 30 DAY) >= now() AND a.is_hotjob=0)
or
(DATE_ADD(a.effected_date, INTERVAL 30 DAY) >= now() AND a.is_hotjob=1)
)
我已清理(但已损坏)的版本:
SELECT ...
FROM `table` AS `a`
WHERE CONCAT(`a`.`title`, ' | ', `a`.`job_detail_section`) LIKE '%Manager%' AND
`a`.`status` = 'Approved' AND
`a`.`effected_date` <= '2013-12-30' AND
(`a`.`effected_date` >= '2013-11-30' OR `a`.`is_hotjob` = '1')
答案 0 :(得分:1)
你得到了最后的AND / OR:
`a`.`effected_date` <= '2013-12-30' OR
(`a`.`effected_date` >= '2013-11-30' AND `a`.`is_hotjob` = '1')
编辑:重新格式化之后,答案看起来更像是:
SELECT ...
FROM `table` AS `a`
WHERE CONCAT(`a`.`title`, ' | ', `a`.`job_detail_section`) LIKE '%Manager%' AND
`a`.`status` = 'Approved' AND
`a`.`effected_date` <= now() AND
`a`.`effected_date` >= DATE_ADD(a.effected_date, INTERVAL 30 DAY)
可能:
AND `a`.`is_hotjob` IN (0,1)
答案 1 :(得分:0)
作为 -
的替代品(DATE_ADD(a.effected_date, INTERVAL 30 DAY) >= now() AND a.is_hotjob=0)
or
(DATE_ADD(a.effected_date, INTERVAL 30 DAY) >= now() AND a.is_hotjob=1)
您可以使用以下内容 -
(`a`.`effected_date` >= '2013-11-30' AND `a`.`is_hotjob` in (0, 1))
但根据附加信息,a.is_hotjob
的值为0
或1
,则根本不需要在条件中提及它。所以基本上以下格式就足够了 -
`a`.`effected_date` >= '2013-11-30'