在WHERE中重用SELECT中的值

时间:2015-04-24 23:21:40

标签: mysql sql

是否可以在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

2 个答案:

答案 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;

SQL Fiddle example