У меня есть ситуация, когда нужно сравнивать пустое поле фиктивного типа.
SELECT id, name, contact, landline, '' fax
FROM table1
WHERE contact LIKE '%123%'
OR landline LIKE '%123%'
OR fax LIKE '%123%'
После выполнения он дает ошибку, например:
Неизвестный столбец "факс" в разделе "where"
Является ли это возможным?
Это невозможно; вы не можете использовать псевдонимы, определенные в том же SELECT
в WHERE
.
MySQL расширяет использование предложения HAVING
, поэтому вы можете переместить условия в HAVING
:
SELECT id, name, contact, landline, '' as fax
FROM table1
HAVING contact LIKE '%123%' OR landline LIKE '%123%' OR fax LIKE '%123%'
Оберните исходный запрос в производную таблицу (подзапрос). Примените условия к его результату:
select id, name, contact, landline, fax
from
(
SELECT id, name, contact, landline, '' fax
FROM table1
) dt
WHERE contact LIKE '%123%'
OR landline LIKE '%123%'
OR fax LIKE '%123%'
ANSI SQL-совместимое решение, будет работать с большинством продуктов dbms.