MySQL 别名子查询
Posted
技术标签:
【中文标题】MySQL 别名子查询【英文标题】:MySQL aliasing subqueries 【发布时间】:2019-03-09 11:47:55 【问题描述】:我有一个只包含两列的表:id1 和 id2。 mysql 中的以下查询可以正常工作:
(select id1 as id, count(id1) as cnt
from my_table
group by id1)
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2)
如果我想将上面的查询用作子查询,我需要为每个派生表设置别名 - 下面的代码会出错(“每个派生表都必须有自己的别名”):
select id, cnt from
(select id1 as id, count(id1) as cnt
from my_table
group by id1)
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2)
但是我找不到正确的语法来给派生表起别名。我正在尝试添加和删除括号,但到目前为止还没有运气。对于下面的查询,我只是得到一般的 SQL 语法错误:
select id, cnt from
(select id1 as id, count(id1) as cnt
from my_table
group by id1) as tab1
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2) as tab2
稍后我会想用这个子查询做更多的事情,而不是只选择 id 和 cnt,但它是一个简化的场景,可以找到别名子查询的正确语法。
【问题讨论】:
我确定不是“它是”! 见meta.***.com/questions/333952/… 【参考方案1】:试试下面:因为你合并了所有的结果,所以你只需要一个别名
SELECT id, cnt
FROM
(
SELECT id1 AS id, COUNT(id1) AS cnt
FROM my_table
GROUP BY id1
UNION ALL
SELECT id2, COUNT(id2)
FROM my_table
GROUP BY id2
) AS tab;
【讨论】:
【参考方案2】:为了完善这个问题,以下是合并两个派生表所需的语法:
SELECT id, cnt
FROM
(
SELECT id1 AS id, COUNT(id1) AS cnt
FROM my_table
GROUP BY id1
) AS tab1
UNION ALL
SELECT id, cnt
FROM
(
SELECT id2 AS id, COUNT(id2) AS cnt
FROM my_table
GROUP BY id2
) AS tab2;
Demo
您需要为UNION
中子查询的每个 组件显式选择语句。当然,@fa06 的答案是你应该使用的,但是如果你需要沿着这条路走,上面就是你如何让它工作的方法。
【讨论】:
感谢您的解释!以上是关于MySQL 别名子查询的主要内容,如果未能解决你的问题,请参考以下文章
Mysql数据库理论基础之五--SELECT单多表查询子查询别名