2012-07-27 5 views
1

У меня есть запрос с где Cluse так:MySQL: Именование скалярные подзапросы в котором положение

WHERE (scalar-subquery1) > (scalar-subquery2)

И это прекрасно работает. Здесь может быть любой оператор вместо «больше чем» («>») между запросами.

Теперь я хочу, чтобы дать имена для этих запросов, так что я могу ссылаться на них в пункте выбора, поэтому я попытался:

SELECT q1,q2 ... WHERE (scalar-subquery1) as q1 > (scalar-subquery2) as q2

Но есть ошибка синтаксиса сообщается между as q1 и > оператором. Любой способ обойти эту проблему?

ответ

2

Вы можете сделать это как подзапрос:

select q1, q2 
from (select (scalar-subquery1) as q1, (scalar-subquery2) as q2 
    ) t 
where q1 < q2 

Или как крест присоединиться:

select q1.val, q2.val 
from(scalar-subquery1) as q1 cross join 
    (scalar-subquery2) q2 
where q1.val < q2.val 

Третий вариант представляет собой вариант первой:

select t.* 
from (select <current select> 
      (scalar-subquery1) as q1, (scalar-subquery2) as q2 
     from <current from> 
    ) t 
where q1 < q2 
+0

К сожалению, это взаимосвязанные подзапросы, которые зависят от другой таблицы из предложения FROM. Если я поместил эти запросы в предложение FROM, я получаю ошибки об неизвестном столбце, потому что теперь объявленная таблица не отображается для этих запросов. –

+0

Я не поклонник коррелированных подзапросов. Однако третий вариант должен делать то, что вы хотите. –

+0

@PiotrSobczyk: ваш скалярный подзапрос в WHERE также является коррелированным, если он зависит от таблиц в предложении FROM. Неважно, помещаете ли вы SELECT или WHERE, если вам все равно нужно оценить его по каждой строке, создаваемой предложением FROM. –

1

Похоже, вы хотите:

SELECT (scalar-subquery1) as q1, (scalar-subquery2) as q2 ... WHERE (scalar-subquery1) > (scalar-subquery2) 

Я не думаю, что MySql позволяет ссылаться на элементы в предложении где из SELECT,

+0

Так что мне нужно повторить как подзапросы дважды? На самом деле нет способа ссылаться на подзапрос от того, где выбрать или по-другому (от выбора в где)? –

+0

Не так далеко, насколько я знаю - но опять же я обычно работаю с Sql Server, а не с MySql, поэтому я не гуру :) – Charleh

Смежные вопросы