В дополнение к тому, что правильно сказал DBCookie (я предполагаю, что пропущенное во внутренних запросах - просто ошибка копирования и вставки):
Производная таблица с псевдонимом data
имеет только один столбецкоторый определяется именем столбца первого SELECT в объединении.Этот столбец называется "a"
(не a
) и из-за кавычек теперь чувствителен к регистру.
Если вы не настаиваете на названии столбца в нижнем регистре, просто пропустите кавычки из внутренних запросов.
select data.*
from (
select col1 as a
from table1
union
select col2 --- you can leave out the alias here it's useless.
from table2
)
WHERE data.a = 'someValue' -- I remove the 1=1 as it doesn't serve any purpose
Если вы настаиваете на наличии псевдонима в кавычках,вы также должны использовать их в предложении WHERE:
WHERE data."a" = 'someValue'
Но это также отфильтровывает значения, которые приходят из таблицы2 и имеют в своем столбце «someValue».Я не уверен, что это то, что вы хотели.Если вы только хотите отфильтровать строки, пришедшие из таблицы1 и имеющие 'someValue' в столбце col1, то вам нужно поместить это условие в объединение:
select data.*
from (
select col1 as a
from table1
where col1 = 'someValue'
union
select col2
from table2
) data
Если вы уверены, что между таблицей 1 и таблицей 2 нет дубликатов, я рекомендую UNION ALL
более UNION
, так как это быстрее, чем