是否可以在SELECT
条款中重用WHERE
中的值?
实际上,如果可能的话,我会没事的:在WHERE
中重用SELECT
中的值。我只是想提高可读性和最终性能:我想现代SQL Server不会计算两次值。
SELECT `e`.*, (datediff(e.start, 'someValue')) AS `offset`
FROM `event` AS `e`
WHERE `offset` % someInterval = 0
代替
SELECT `e`.*, (datediff(e.start, 'someValue')) AS `offset`
FROM `event` AS `e`
WHERE (datediff(e.start, 'someValue')) % someInterval = 0
答案 0 :(得分:3)
使用HAVING
代替WHERE
:
SELECT `e`.*, (datediff(e.start, 'someValue')) AS `offset`
FROM `event` AS `e`
HAVING `offset` % someInterval = 0
WHERE
用于决定将哪些行放入结果集中,因此如果您可以在选择结果的同时引用结果,则会有无限回归。
HAVING
用于在计算结果后过滤结果。
答案 1 :(得分:1)
这里你去......
SELECT t.* FROM (
SELECT `e`.*, (datediff(e.start, NOW())) AS `offset`
FROM `event` AS `e`
) t
WHERE t.`offset` % 2 = 0;