24

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

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

句なしでクエリを実行すると必要な結果が得られますが、where句を追加するwhereとクエリが失敗します。

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

4

2 に答える 2

52

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

したがって、クエリを外側の選択でラップし、そこに条件を適用します

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デモを次に示します。

于 2013-08-03T06:05:44.093 に答える
0

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

SELECT a, b, c,
    B.d
FROM A, (SELECT d from B limit 0,1) B
WHERE B.d >= 10 
于 2013-08-03T05:52:36.810 に答える