web-dev-qa-db-ja.com

SQLはwhere句の副選択から列を使用します

次のようなクエリがあります。

SELECT a, b, c,
    (SELECT d from B limit 0,1) as d
FROM A
WHERE d >= 10

whereclauseを使用せずにクエリを実行すると、必要な結果が得られますが、where句を追加すると、クエリは失敗します。

誰もそれを解決する方法を提案していますか?

19
Chris

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

そのため、クエリを外側のselectでラップし、そこに条件を適用します

SELECT * 
  FROM
(
  SELECT a, b, c,
    (SELECT d FROM B LIMIT 0,1) d
  FROM A
) q
 WHERE d >= 10

または、代わりにHAVING句でその条件を導入できます

SELECT a, b, c,
    (SELECT d FROM B LIMIT 0,1) d
  FROM A
HAVING d >= 10

さらに別のアプローチは、CROSS JOINおよびWHERE句に条件を適用します

SELECT a, b, c, d
  FROM A CROSS JOIN 
(
  SELECT d FROM B LIMIT 0,1
) q
 WHERE d >= 10

上記のすべてのクエリのSQLFiddleデモです。

44
peterm

これは、あなたの望むことですか?

SELECT a, b, c,
    B.d
FROM A, (SELECT d from B limit 0,1) B
WHERE B.d >= 10 
1
Clxy