在sql列中连接select

kq4fsx7k  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(267)

我有三张n-m关系的table。表a、表b和表a有表b。

SELECT A.ID_Projectos, B.Nombre_Imagen 
FROM Table A_has_B 
INNER JOIN B on Table A_has_B.ID_Imagenes = B.ID_Imagenes 
INNER JOIN A on Table A_has_B.ID_Projectos = A.ID_Projectos

使用此sql select的输出是:

ID_Projectos | Nombre_Imagen
1            | Name_1.jpg
1            | Name_2.jpg
1            | Name_3.jpg

但我需要这个输出。。。

ID_Projectos | Nombre_Imagen | Nombre_Imagen2 | Nombre_Imagen3
1            | Name_1.jpg    | Name_2.jpg     | Name_3.jpg
sqyvllje

sqyvllje1#

最简单的方法是将值串联到一个列中:

SELECT A.ID_Projectos, GROUP_CONCAT(B.Nombre_Imagen)
FROM Table A_has_B INNER JOIN
     B
     on Table A_has_B.ID_Imagenes = B.ID_Imagenes INNER JOIN
     A
     on Table A_has_B.ID_Projectos = A.ID_Projectos;

可能最简单的方法是使用字符串操作将其放在三列中:

SELECT A.ID_Projectos,
       SUBSTRING_INDEX(GROUP_CONCAT(B.Nombre_Imagen), ',' 1) as imagen_1,
       (CASE WHEN COUNT(*) >= 2 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(B.Nombre_Imagen), ',' 2), ',', -1) END) as imagen_2,
       (CASE WHEN COUNT(*) >= 3 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(B.Nombre_Imagen), ',' 3), ',', -1) END) as imagen_3
FROM Table A_has_B INNER JOIN
     B
     on Table A_has_B.ID_Imagenes = B.ID_Imagenes INNER JOIN
     A
     on Table A_has_B.ID_Projectos = A.ID_Projectos
GROUP BY A.ID_Projectos;

相关问题