2012-02-13 4 views
0

Возможно ли это?SQL LIKE on Alias ​​

Я пытаюсь сделать 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%') 

Благодаря

+1

Насколько я знаю, это невозможно, по крайней мере, в SQL Server. Вам нужно использовать 'CASE PERSON_TYPE WHEN 'PER' THEN LAST_NAME ELSE COMPANY_NAME END как '% AN%'' – dasblinkenlight

ответ

1

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

Один передать FULLNAME в ИНЕКЕ, как это:

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

Отмечая, что этот вопрос имеет только тег 'sql', ни один из ваших запросов не соответствует стандартным SQL. Предложение о том, как исправить это: измените '*' на 'PERSON. *'. – onedaywhen

+0

@ заблаговременно после этого! спасибо за предложение, я использовал запрос от пользователя, чтобы он работал на нем. –

0

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

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

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

0

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