Сценарий:
Table1:
city_id | city_name | ...
-------------------------------------
1 | Aaaa
2 | Bbb
3 | Ccc
4 | Ddd
...
Table2:
region_id | region_name | ...
-------------------------------------
1001 | Qwer
1002 | Zxcv
1003 | Vbnm
...
Ожидаемый результат:
id | name | ...
-------------------------------------
3 | Ccc
4 | Ddd
1001 | Qwer
1002 | Zxcv
1003 | Vbnm
...
Идентификаторы гарантированно будут разными в двух таблицах.
Я хочу выбрать обе таблицы с объединением (так как они были 1 отдельной таблицей), а затем использовать WHERE
Query1
SELECT
city_id AS 'id',
city_name AS 'name'
FROM table1
UNION
SELECT
region_id AS 'id',
region_name AS 'name'
FROM table2
WHERE 'id' > 2
Но этот запрос возвращает только данные из первой таблицы.
Я только что увидел, что один из способов добиться этого - заключить союз в выборку.
Query2
SELECT * FROM (
SELECT
city_id AS 'id',
city_name AS 'name'
FROM table1
UNION
region_id AS 'id',
region_name AS 'name'
FROM table2
) AS t
WHERE t.id > 2
Есть ли солитон без использования подзапроса?
Если нет, как влияет производительность на использование подзапроса в этом случае (приблизительно)?
Бонусный вопрос
В query2 , почему WHERE
применяется к первой таблице? Разве это не должно быть что-то вроде:
{{
SELECT
city_id AS 'id',
city_name AS 'name'
FROM table1
}}
UNION
{{
SELECT
region_id AS 'id',
region_name AS 'name'
FROM table2
WHERE 'id' > 2
}}
обновление
Сравнение подзапроса и принятого ответа
- 0 - 1 тыс. Строк: подзапрос работает на 20% медленнее.
- 1k - 100k строк: TODO