Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从select/union生成表_Mysql_Sql_Select_Union - Fatal编程技术网

Mysql 从select/union生成表

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构

我有一个从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

你的方法很好。如果
在视图的位置,则会出现多次计算视图的问题。即使使用表,也必须多次扫描该表

假设没有要删除的重复项,请将
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操作的标准方法。联合查询有什么问题?