0

Mysql を使用すると、次のステートメントが機能します。

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
       UNIX_TIMESTAMP('2013-11-14 14:35:21') ) as diff from Alert
order by diff
limit 3

しかし、次のように where 句を追加すると、「'where 句' の列 'diff' が不明です」というエラーが発生します。

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
       UNIX_TIMESTAMP('2013-11-14 14:35:21') ) as diff from Alert
where diff < 2
order by diff
limit 3

次のように、Having 句を使用するようにステートメントを変更します。

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
       UNIX_TIMESTAMP('2013-11-14 14:35:21') ) as diff from Alert
order by diff
having diff<2

それはまだ私に与えています SQL構文にエラーがあります。4 行目の「having diff<2」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

2 に答える 2

1

where句でエイリアス名を使用することはできませんが、クエリによって完全な結果がフェッチされた後にorder byが発生するため、order byを使用すると機能します。

あなたの3番目のクエリはエラーを出している

SELECT *, ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21') ) as diff 
from Alert having diff<2 order by diff 

いくつかの詳細

WHERE is used while listing and no ALIAS names are available yet

HAVING filters rows after listing all possible rows so ALIAS names are generated
于 2013-12-13T10:04:32.847 に答える
0

使用する

SELECT *, ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21') ) as diff 
from Alert 
order by 
    ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21') ) 
limit 3

order by (または where) 句で名前付き列の計算を使用することはできません。

于 2013-12-13T09:56:28.693 に答える