2013-04-14 2 views
1

Могу ли я обратиться к псевдониму, созданному из подзапроса в предложении FROM, во втором подзапросе в предложении where?Ссылаясь на псевдоним подзапроса в следующем подзапросе

Select x FROM 
((SELECT x,y FROM A) UNION (SELECT x,y FROM B) UNION (SELECT x,y FROM C)) AS newAlias 
WHERE y IN (SELECT MAX(y) FROM newAlias) 
+0

Я 99% уверен, что ответ да, но в любом случае, вы можете легко проверить эти вещи для себя с помощью SQL скрипку: http://sqlfiddle.com/ –

+1

Нет, ответ - нет. Подзапрос 'NewAlias' должен быть повторен. –

ответ

1

Нет, ответ нет. Подзапрос NewAlias должен быть повторен.

Можно было бы с КТР (Common табличных выражений), но MySQL не выполнил их:

WITH newAlias AS 
    (SELECT x,y FROM A UNION SELECT x,y FROM B UNION SELECT x,y FROM C) 
SELECT x 
FROM newAlias 
WHERE y = (SELECT MAX(y) FROM newAlias) ; 

В MySQL, вы должны повторить подзапрос:

SELECT x 
FROM 
    (SELECT x,y FROM A UNION SELECT x,y FROM B UNION SELECT x,y FROM C) 
    AS newAlias 
WHERE y = 
     (SELECT MAX(y) 
     FROM 
      (SELECT x,y FROM A UNION SELECT x,y FROM B UNION SELECT x,y FROM C) 
      AS newAlias 
    ) ; 

Конечно, вы обычно может переписывать-переформулировать запрос. Один из способов сделать это:

SELECT x 
FROM 
    (SELECT x,y FROM A UNION SELECT x,y FROM B UNION SELECT x,y FROM C) 
    AS newAlias 
WHERE y = GREATEST((SELECT MAX(y) FROM A) 
        , (SELECT MAX(y) FROM B) 
        , (SELECT MAX(y) FROM C) 
       ) ;   
Смежные вопросы