Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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 sql中的查询--pivot或任何其他方式_Mysql_Sql - Fatal编程技术网

Mysql sql中的查询--pivot或任何其他方式

Mysql sql中的查询--pivot或任何其他方式,mysql,sql,Mysql,Sql,在查询以下场景时需要您的帮助 表1 Name -ID1 - ID2 - ID3 A1 - NULL - 11 - 12 A2 - 14 - NULL -11 上表需要翻译如下 表2 Name - ID A1 - 11 A1 - 12 A2 - 14 A2 - 11 表2是基于表1的输出。不会考虑所有空值。最好的方法是什么 谁能帮我询问一下怎么做。非常感谢使用联合所有人: SELECT t.* FROM ( SELECT name, id1 AS

在查询以下场景时需要您的帮助

表1

Name -ID1  - ID2 - ID3  
A1  - NULL - 11 - 12  
A2  -  14  - NULL -11
上表需要翻译如下

表2

Name - ID  
A1  - 11  
A1  - 12  
A2 - 14  
A2 - 11
表2是基于表1的输出。不会考虑所有空值。最好的方法是什么


谁能帮我询问一下怎么做。非常感谢

使用
联合所有人

SELECT t.*
FROM
(
    SELECT name, id1 AS id FROM table1
    UNION ALL
    SELECT name, id2 FROM table1
    UNION ALL
    SELECT name, id3 FROM table1
) t
WHERE id IS NOT NULL
ORDER BY name;

使用“全部联合”:

SELECT t.*
FROM
(
    SELECT name, id1 AS id FROM table1
    UNION ALL
    SELECT name, id2 FROM table1
    UNION ALL
    SELECT name, id3 FROM table1
) t
WHERE id IS NOT NULL
ORDER BY name;
您可以使用UNPIVOT:

SELECT name, ID 
FROM ( SELECT name, ID1, ID2, ID3 FROM table1)p
UNPIVOT
     (ID FOR ID_value IN (ID1, ID2, ID3)) AS unpvt;
这将自动消除空值,并以数据透视格式输出。

您可以使用UNPIVOT:

SELECT name, ID 
FROM ( SELECT name, ID1, ID2, ID3 FROM table1)p
UNPIVOT
     (ID FOR ID_value IN (ID1, ID2, ID3)) AS unpvt;

这将自动消除空值,并以数据透视格式输出。

我将在每个select查询中放置is not null WHERE语句,以使内存表尽可能小。。UNION语句将强制MySQL使用内存表。。如果内存表变大,它将转换为基于MyISAM磁盘的表。谢谢你们的回复。但是如何动态处理呢。正如表1可以一直到ID1-ID50“但如何动态接近。正如表1可以一直到ID1-ID50”一样@kavanabangalore为什么在有人给出答案后总是会出现额外的“功能/需求”,我看到这在stackoverflow上经常发生……我错了。Chill broi会在每个select查询中放置is not null WHERE语句,以使内存表尽可能小。。UNION语句将强制MySQL使用内存表。。如果内存表变大,它将转换为基于MyISAM磁盘的表。谢谢你们的回复。但是如何动态处理呢。正如表1可以一直到ID1-ID50“但如何动态接近。正如表1可以一直到ID1-ID50”一样@kavanabangalore为什么在有人给出答案后总是会出现额外的“功能/需求”,我看到这在stackoverflow上经常发生……我错了。冷兄弟