我遇到了一些麻烦,因为我无法访问 Where 子句中的自定义列。在许多尝试中,只能在HAVING
子句上进行(较慢且我想避免的事情)。是否可以访问 onWHERE
子句?我举个例子:
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
WHERE UNIX_TIMESTAMP(date)>1321401600
提前致谢。
我遇到了一些麻烦,因为我无法访问 Where 子句中的自定义列。在许多尝试中,只能在HAVING
子句上进行(较慢且我想避免的事情)。是否可以访问 onWHERE
子句?我举个例子:
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
WHERE UNIX_TIMESTAMP(date)>1321401600
提前致谢。
不管你怎么改写,我想你的服务器会发现很难优化那个特定的表达式,所以你总是会发现你的查询很慢,但我想最好的办法是测试每个人的答案,看看哪个一个是最快的。所以考虑到这一点,这是我的建议:
WHERE (table1.x = "bla" AND UNIX_TIMESTAMP(table1.date) > 1321401600)
OR (table1.x != "bla" AND UNIX_TIMESTAMP(table2.date) > 1321401600)
如果您想在您的中使用别名,WHERE
则可以将查询包装在 aSELECT
中以使用别名:
SELECT *
FROM
(
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
) x
WHERE UNIX_TIMESTAMP(date)>1321401600
在这种情况下,您需要对两个表执行时间戳检查。
例如
SELECT ... FROM table1
JOIN table2 ON table2.date > x
WHERE table1.date > x