1

私は次のようなSQLを使用します:

SELECT COALESCE(group.display,item.display) as display....

WHERE句を追加したいと思います。

WHERE display='1'

WHERE表示は合体の結果です。

同様に、次のようなものでも同じことができるようにしたいと思います。

IF(ISNULL(gd.group_main_image),p.main_image,gd.group_main_image) AS image
... WHERE image IS NOT NULL

どうすればこれを行うことができますか?

4

3 に答える 3

3

同じレベルのクエリでエイリアスを使用することはできません。

あなたは自分自身を繰り返さなければなりません。

WHERE COALESCE(group.display,item.display) = '1'

編集

ええと、私はあまりにも制限的でした。MySqlのhave句でエイリアスを使用できます。他のDBMS(Oracle、SQl Server)ではそれを行うことはできません。通常、ANSISQLでも許可されていません。

于 2012-07-04T10:06:36.180 に答える
0

列エイリアスの問題で説明されているように:

クエリ選択リストでエイリアスを使用して、列に別の名前を付けることができます。GROUP BY、、、ORDER BYまたはHAVING句のエイリアスを使用して、列を参照できます。

SELECT SQRT(a * b)AS root FROM tbl_name
  GROUP BY root HAVING root> 0;
SELECT id、COUNT(*)AS cnt FROM tbl_name
  GROUP BY ID HAVING cnt> 0;
SELECT idAS'顧客ID'FROMtbl_name ;

標準SQLでは、WHERE句内の列エイリアスへの参照は許可されていません。この制限が課せられるのは、WHERE句が評価されるときに、列の値がまだ決定されていない可能性があるためです。たとえば、次のクエリは不正です。

SELECT id、COUNT(*)AS cnt FROM tbl_name 
  WHERE cnt> 0 GROUP BY id;

句は、WHEREどの行をGROUP BY句に含めるかを決定しますが、行が選択され、によってグループ化されるまでわからない列値のエイリアスを参照しますGROUP BY

于 2012-07-04T10:09:13.797 に答える
0

句で列エイリアスを使用することはできませんWHERE

それで:

WHERE COALESCE(group.display,item.display)='1'

また:

HAVING display='1'

ただし、HAVINGすべての結果セットが検出された後に実行されるため、基本的にこれはより多くのメモリを消費します

于 2012-07-04T10:06:55.310 に答える