【发布时间】:2018-12-12 17:58:58
【问题描述】:
场景:
表1:
city_id | city_name | ...
-------------------------------------
1 | Aaaa
2 | Bbb
3 | Ccc
4 | Ddd
...
表2:
region_id | region_name | ...
-------------------------------------
1001 | Qwer
1002 | Zxcv
1003 | Vbnm
...
预期结果:
id | name | ...
-------------------------------------
3 | Ccc
4 | Ddd
1001 | Qwer
1002 | Zxcv
1003 | Vbnm
...
保证 2 个表的 ID 不同。
我想用 union 选择两个表(因为它们是 1 个单表),然后使用 WHERE
查询1
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
但是这个查询只返回第一个表中的数据。
我刚刚看到实现此目的的一种方法是将联合包装在一个选择中。
查询2
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 - 1k 行:子查询慢约 20%。
- 1k - 100k 行:TODO
【问题讨论】:
-
SELECT city_id AS 'id', city_name AS 'name' FROM table1仅返回表 1 中的 id 和城市名称,这就是为什么:"this query returns only data from 1st table." -
编辑您的问题并向我们展示您对结果的期望