Mysql 从select/union生成表
我有一个从csv文件构建的关系表,该文件每行包含外部键 表结构:Mysql 从select/union生成表,mysql,sql,select,union,Mysql,Sql,Select,Union,我有一个从csv文件构建的关系表,该文件每行包含外部键 表结构: | id | tree/nome | tree/regioni/0 | .... | tree/regioni/n “n”等于36!!! 我从“SELECT/DINSTICT”构建了一个表“regions”,并在其上添加了一个id 现在我需要构建另一个表,用每行的“id”附加“外部键”“tree/regioni/n” 我发现实现这一点的一个不明智的方法是从每个“tree/regioni/n”的SELECT/UNION构
| id | tree/nome | tree/regioni/0 | .... | tree/regioni/n
“n”等于36!!!
我从“SELECT/DINSTICT”构建了一个表“regions”,并在其上添加了一个id
现在我需要构建另一个表,用每行的“id”附加“外部键”“tree/regioni/n”
我发现实现这一点的一个不明智的方法是从每个“tree/regioni/n”的SELECT/UNION构建表:
SELECT `id`,`tree/regioni/0`
FROM `trees` WHERE 1
UNION
SELECT `id`,`tree/regioni/1`
FROM `trees` WHERE 1
[.....]
UNION
SELECT `id`,`tree/regioni/N`
FROM `trees`
WHERE 1
你的方法很好。如果
树
在视图的位置,则会出现多次计算视图的问题。即使使用表,也必须多次扫描该表
假设没有要删除的重复项,请将union
更改为union all
。您还可以使用交叉联接:
select t.id,
(case when n = 1 then `tree/regioni/0`
when n = 2 then `tree/regioni/1`
. . .
end)
from t cross join
(select 0 as n union all
select 1 as n union all
. . .
) x;
这看起来更复杂,但它只扫描/计算表表达式一次 恕我直言,您可能没有在这里使用最佳的桌子设计。如果
n
值位于单个列中,但分布在不同的记录中,则可以限制使用简单的WHERE
子句。是的,这是在mysql中执行unpivot操作的标准方法。联合查询有什么问题?