我有一个从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中构建表:
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发布于 2019-09-23 00:18:23
你的方法很好。如果trees where是一个视图,那么您就会遇到多次计算视图的问题。即使有一个表,您也必须多次扫描该表。
假设您没有要删除的重复项,请将union更改为union all。您还可以使用cross join
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;这看起来更复杂,但它只扫描/计算表表达式一次。
https://stackoverflow.com/questions/58050456
复制相似问题