MySQL 别名子查询
MySQL aliasing subqueries
我有一个 table 仅包含两列: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)
如果我想将上面的查询用作子查询,我需要为每个派生的 table 添加别名 - 下面的代码给出错误 ("every derived table must have it’s own alias"):
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)
但我找不到正确的语法来为派生的 table 设置别名。我正在尝试添加和删除括号,但到目前为止还没有成功。对于下面的查询,我只得到通用的 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,但这是为别名子查询找到正确语法的简化方案。
试试下面的方法:因为你合并了所有的结果所以你只需要一个别名
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;
为了解决这个问题,这里是合并两个派生表所需的语法:
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;
对于 UNION
中子查询的 每个 组件,您需要明确的 select 语句。当然,@fa06 的回答是你应该使用的,但如果你需要走这条路,上面是你如何让它工作。
我有一个 table 仅包含两列: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)
如果我想将上面的查询用作子查询,我需要为每个派生的 table 添加别名 - 下面的代码给出错误 ("every derived table must have it’s own alias"):
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)
但我找不到正确的语法来为派生的 table 设置别名。我正在尝试添加和删除括号,但到目前为止还没有成功。对于下面的查询,我只得到通用的 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,但这是为别名子查询找到正确语法的简化方案。
试试下面的方法:因为你合并了所有的结果所以你只需要一个别名
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;
为了解决这个问题,这里是合并两个派生表所需的语法:
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;
对于 UNION
中子查询的 每个 组件,您需要明确的 select 语句。当然,@fa06 的回答是你应该使用的,但如果你需要走这条路,上面是你如何让它工作。