Where 句のカスタム列にアクセスできないため、少し問題があります。多くの試みでは、句でのみ可能HAVING
です(遅く、避けたいものです)。WHERE
節にアクセスすることは可能ですか? 例を挙げます:
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
WHERE UNIX_TIMESTAMP(date)>1321401600
前もって感謝します。
Where 句のカスタム列にアクセスできないため、少し問題があります。多くの試みでは、句でのみ可能HAVING
です(遅く、避けたいものです)。WHERE
節にアクセスすることは可能ですか? 例を挙げます:
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
WHERE UNIX_TIMESTAMP(date)>1321401600
前もって感謝します。
その場合、両方のテーブルでタイムスタンプ チェックを実行する必要があります。
例えば
SELECT ... FROM table1
JOIN table2 ON table2.date > x
WHERE table1.date > x
どのように書き直しても、サーバーはその特定の式を最適化するのが難しいと思うので、クエリが常に遅いことがわかりますが、最善の方法は、全員の回答をテストしてどれがどれかを確認することだと思います1 つが最速です。それを念頭に置いて、ここに私の提案があります:
WHERE (table1.x = "bla" AND UNIX_TIMESTAMP(table1.date) > 1321401600)
OR (table1.x != "bla" AND UNIX_TIMESTAMP(table2.date) > 1321401600)
でエイリアスを使用する場合はWHERE
、クエリを でラップしSELECT
てエイリアスを使用できます。
SELECT *
FROM
(
SELECT (...) IF(table1.x="bla",table1.date,table2.date) as date
FROM (...)
) x
WHERE UNIX_TIMESTAMP(date)>1321401600