2014-12-01 2 views
0

У меня есть Mysql Query:Mysql использовать столбец псевдоним в котором пункт

SELECT created_at as date FROM table 

Так что я создал псевдоним для столбца created_at. Теперь я хочу использовать этот псевдоним в своем предложении WHERE:

SELECT created_at as date FROM table WHERE date = 'xxxx-xx-xx' 

Это не работает. Mysql ожидает, что я буду использовать имя реального столбца. Есть ли способ сделать это так, как я хочу?

Фон: Я выбираю записи из нескольких таблиц и объединяю их, используя UNION. Все таблицы имеют столбец с датой, но в каждой таблице они называются разными. Но я хочу сделать WHERE по объединенным записям, и поэтому мне нужно всегда иметь одно и то же имя столбца

+0

макияж внешний выбрать выше всех союзов, а затем использовать, где с датой. –

+1

Вы не можете использовать псевдоним в предложениях запроса, как вы это делали. Вы действительно не должны использовать псевдоним, который также является дубликатом ключевых слов. –

ответ

0

Вы спросили: «Есть ли способ сделать это так, как я хочу?»

Да, но для этого требуется использование подзапроса или вида.

SELECT date 
FROM (SELECT created_at as date FROM table) B 
WHERE date = 'xxxx-xx-xx' 

С случае объединения ...

SELECT * from (
Select col1, col2,col3 as date from A 
union 
select col1, col4,col5 from B) inlineView 
WHERE date = 'somedate' 

Проблема вы бежите в это порядок работы в базе данных.

  1. ЕКОМА
  2. ИНЕК
  3. предложений GROUP BY
  4. HAVING п
  5. ЗЕЬЕСТА
  6. ОКВЕКА В

(порядка взято из http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm) других заказ был найден MySQL Order of Operations?

так что теперь я должен провести некоторое исследование, чтобы выяснить, какой из них правильный; или если он изменяется в СУРБД ...

Таким образом, предложение where выполняется до того, как оценивается выбор. Таким образом, он не знает, что вы все еще на него навязывали. вы можете обмануть компилятор, сделав столбцы данных так, как вы хотите, в предложении from, выполнив подзапрос.

1

Если Вы абсолютно должны использовать свой псевдоним в качестве части критериев отбора, то вам нужно использовать HAVING вместо WHERE

SELECT created_at as date FROM table HAVING date = 'xxxx-xx-xx' 

Но лучше использовать имя столбца и WHERE, потому что другие люди читают ваши код найдет значение WHERE более очевидным, чем HAVING; и он не будет использовать ваши индексы таблицы, как эффективно либо

0

Где не работает на псевдонимами .. лучше вы table_name.column_namem вы можете использовать псевдонимы столбцов в группе ..

SELECT created_at FROM table WHERE table.created_at = 'xxxx-xx-xx' <--more readable, isn't it? 
Смежные вопросы