Mysql 选择带有where条件的union,而列具有不同的名称
情景: 表1:Mysql 选择带有where条件的union,而列具有不同的名称,mysql,union,union-all,Mysql,Union,Union All,情景: 表1: city_id | city_name | ... ------------------------------------- 1 | Aaaa 2 | Bbb 3 | Ccc 4 | Ddd ... 表2: region_id | region_name | ... -------------------------------------
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
...
两个表中的ID保证是不同的
我想选择两个带有union的表(因为它们是一个表),然后使用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
但是这个查询只返回第一个表中的数据
我刚刚看到实现这一点的一种方法是将工会包装成一个select
查询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
有没有不使用子查询的孤子
如果不是,在这种情况下(大约)使用子查询对性能有何影响
奖金问题
在查询2中,为什么将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行:待办事项
SELECT
city_id AS 'id',
city_name AS 'name'
FROM table1
WHERE city_id > 2
UNION
region_id AS 'id',
region_name AS 'name'
FROM table2
WHERE region_id > 2
;
至于与性能相关的问题,如果在计算UNION子查询之后计算WHERE子句,并且id列上有索引,那么您可能不会从索引中受益。但是,您必须检查执行计划,以查看优化器是否正确识别了此情况并按索引进行了操作。您可以向两个查询添加相同的WHERE子句:
SELECT
city_id AS 'id',
city_name AS 'name'
FROM table1
WHERE city_id > 2
UNION
region_id AS 'id',
region_name AS 'name'
FROM table2
WHERE region_id > 2
;
至于与性能相关的问题,如果在计算UNION子查询之后计算WHERE子句,并且id列上有索引,那么您可能不会从索引中受益。但您必须检查执行计划,以查看优化器是否正确识别此案例并按索引进行操作。
从表1中选择city\u id作为“id”,city\u name作为“name”,这就是为什么:只返回表1中的id和城市名称:“此查询只返回第一个表中的数据。”
编辑您的问题并向我们展示您期望的结果从表1中选择city\u id作为“id”,city\u name作为“name”
从表1中只返回id和城市名称,这就是为什么:“此查询只返回第一个表中的数据。”
编辑您的问题并向我们展示您期望的结果如此简单,我觉得很愚蠢。问:如果两个表都有相同的列名,我的查询1是否会像预期的那样工作,或者我是否仍然需要在两个查询中放置WHERE
。问题:如果两个表都有相同的列名,我的查询1是否会像预期的那样工作,或者我是否仍然需要在两个查询中放置WHERE
?