SQL-столбец из подзадачи в разделе where

У меня есть запрос, который выглядит примерно так:

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

Я получаю результат, который я хочу, когда я запускаю запрос без предложения where, но когда я добавляю предложение where, запрос выходит из строя.

Есть ли у кого-нибудь предложение, как это решить?

Ответы

Ответ 1

Вы не можете использовать псевдоним столбца в 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 демонстрация для всех вышеупомянутых запросов.

Ответ 2

Это то, что вы хотите?

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