SQL как на псевдоним - PullRequest
       9

SQL как на псевдоним

0 голосов
/ 13 февраля 2012

Возможно ли это?

Я пытаюсь выполнить оператор SQL для псевдонима, но получаю сообщение об ошибке ...

SELECT 
      CASE PERSON_TYPE  WHEN 'PER' THEN LAST_NAME
                                   ELSE COMPANY_NAME
      END AS FULLNAME, *
FROM PERSON
[WHERE FULLNAME LIKE '%AN%'] // Error FULLNAME - INvalid COlumn Name

в противном случае, я использую альтернативу ....

WHERE (LAST_NAME LIKE '%AN%') OR (COMPANY_NAME LIKE '%AN%')

Спасибо

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

У вас есть два решения.

Один из них заключается в том, чтобы передать ФИО ИМЕНИ ГДЕ, как это:

SELECT 
      CASE PERSON_TYPE  WHEN 'PER' THEN LAST_NAME
                                   ELSE COMPANY_NAME
      END AS FULLNAME, PERSON.*
FROM PERSON
WHERE (PERSON_TYPE = 'PER' AND LAST_NAME LIKE '%AN%') OR (COMPANY_NAME LIKE '%AN%')

Другой должен сделать ВНУТРЕННИЙ ЗАПРОС, как это:

SELECT t.*
FROM (SELECT *, CASE PERSON_TYPE  
                  WHEN 'PER' THEN LAST_NAME 
                  ELSE COMPANY_NAME END AS FULLNAME
FROM PERSON ) t
WHERE t.FULLNAME LIKE '%AN%'
0 голосов
/ 13 февраля 2012

Нет, вы не можете использовать псевдоним в состоянии WHERE.Кстати, вы также можете удалить ", *" из оператора выбора.Это также приведет к ошибке.

0 голосов
/ 13 февраля 2012

Вы не можете получить доступ к псевдонимам полей в WHERE. Используйте производные таблицы / CTE в качестве альтернативы или повторите все выражение целиком в WHERE. Трюк для MySQL: вы можете поставить его на HAVING без GROUP BY

0 голосов
/ 13 февраля 2012

Один из способов сделать это -

SELECT *
FROM (SELECT *, CASE PERSON_TYPE  
                  WHEN 'PER' THEN LAST_NAME 
                  ELSE COMPANY_NAME END AS FULLNAME
FROM PERSON ) t
WHERE FULLNAME LIKE '%AN%'
...