2013-06-14 3 views
2

мне нужно это условие для моей хранимой процедуры, могу ли я каким-либо образом псевдоним доступа объявлен во внутреннем уровне из-за пределов его контекстаКак получить доступ к внутреннему псевдониму в MySQL?

Это работает: -

SELECT Count(*) 
FROM (SELECT id 
     FROM postdata 
     WHERE id IN (4, 5, 6) 
     UNION 
     SELECT id 
     FROM (SELECT id, 
         date_completed 
       FROM postdata 
       WHERE id IN (1, 2, 3))a 
     WHERE a.date_completed in ("2012-1-10", "2012-10-02"))b 

есть возможность сделать эту работу

SELECT Count(*) 
FROM (SELECT id 
     FROM postdata 
     WHERE id IN (4, 5, 6) 
     UNION 
     SELECT id 
     FROM (SELECT id, 
         date_completed 
       FROM postdata 
       WHERE id IN (1, 2, 3))a)b 
WHERE a.date_completed IN ("2012-1-10", "2012-10-02") 
+0

Можете ли вы быть более конкретным о том, чего вы пытаетесь достичь? Помимо ошибки псевдонима, второй запрос является синтаксически правильным, althoug отличается от первого. –

+0

Вышеприведенный запрос представляет собой примерное представление, которое не имеет никакого отношения к реальной реализации. Я действительно хочу, чтобы получить доступ к внутреннему псевдониму, который является «а» в этом случае. – thickGlass

ответ

1

AFAIK, нет доступа к внутреннему псевдониму a.

Вы должны добавить дискриминант в ваших внутренних запросов:

SELECT Count(*) 
FROM (SELECT 'a' AS discriminant, 
       id 
     FROM postdata 
     WHERE id IN (4, 5, 6) 
     UNION 
     SELECT 'b' AS discriminant, 
       id 
     FROM (SELECT id, 
         date_completed 
       FROM postdata 
       WHERE id IN (1, 2, 3))a)b 
WHERE b.discriminant= 'a' 
     OR (b.discriminant= 'b' 
      AND b.id IN (1, 2)) 

См this fiddle.

+0

Спасибо за быстрый ответ, который работал для меня, я думаю, я могу формовать его для работы в моем случае – thickGlass

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