gpt4 book ai didi

mysql - 当列具有不同名称时,选择与 where 条件并集

转载 作者:行者123 更新时间:2023-11-29 06:41:58 27 4
gpt4 key购买 nike

场景:

表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 不同。

我想通过联合选择两个表(因为它们是 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

不使用子查询是否存在孤子?

如果不是,在这种情况下使用子查询(大约)对性能有何影响?

奖励问题

查询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 行:TODO

最佳答案

您可以向两个查询添加相同的 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 列上有索引,则您可能无法从索引中受益。但是您必须检查执行计划,看看优化器是否正确识别这种情况并按照索引执行。

关于mysql - 当列具有不同名称时,选择与 where 条件并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51171202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com