带有 SUBQUERY 的动态 GROUP CONCAT
Dynamic GROUP CONCAT with SUBQUERY
我认为这不是一个难题,但我没有找到任何主题来解决它。
1 'DRIVER' 一次驱动 1 'TRUCK',
1 'TRUCK' 一次携带多个 'BOXS'。
我有两个问题:
简单的:
Select a.*,
(Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER) as IDTRUCK
From DRIVERS a;
结果:
IDDRIVER | NAMEDRIVER | IDTRUCK
-------------------------------
1 | Michel | 45
2 | Jean | 35
和复杂的(摘自here):
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`IDBOX` = ', `IDBOX`, ',WEIGHTBOX,NULL)) AS WEIGHTBOX', `IDBOX`)
) INTO @sql
FROM BOXS;
SET @sql = CONCAT('SELECT IDTRUCK, ', @sql, '
FROM BOXS WHERE IDTRUCK =
(Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER)
GROUP BY IDTRUCK');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
结果:
IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2
-------------------------------
45 | 75.2 | 46.3
35 | 154 | 69.4
我想要这两个结果合二为一 table :
IDDRIVER | NAMEDRIVER | IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2
---------------------------------------------------------
1 | Michel | 45 | 75.2 | 46.3
2 | Jean | 35 | 154 | 69.4
但我不知道如何将这两个查询结合起来。
我认为 JOIN 可以完成这项工作,但我没有成功。
PS:对不起,我的英语很基础。
编辑:根据 Shadow, it's possible to do this with a left join (here) 但我不知道我必须将查询的不同部分放在哪里才能使它们工作。不是理解的问题,是句法的问题
您可以在动态查询中包含其他表。像这样:
SET @sql = CONCAT('
SELECT d.*, t.IDTRUCK, ', @sql, '
FROM DRIVERS d
JOIN TRUCKS t ON ACTUEL = TRUE AND t.IDDRIVER = d.IDDRIVER;
LEFT JOIN BOXS b ON BOXS.IDTRUCK = t.IDTRUCK
GROUP BY t.IDTRUCK');
我认为这不是一个难题,但我没有找到任何主题来解决它。
1 'DRIVER' 一次驱动 1 'TRUCK', 1 'TRUCK' 一次携带多个 'BOXS'。
我有两个问题:
简单的:
Select a.*,
(Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER) as IDTRUCK
From DRIVERS a;
结果:
IDDRIVER | NAMEDRIVER | IDTRUCK
-------------------------------
1 | Michel | 45
2 | Jean | 35
和复杂的(摘自here):
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`IDBOX` = ', `IDBOX`, ',WEIGHTBOX,NULL)) AS WEIGHTBOX', `IDBOX`)
) INTO @sql
FROM BOXS;
SET @sql = CONCAT('SELECT IDTRUCK, ', @sql, '
FROM BOXS WHERE IDTRUCK =
(Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER)
GROUP BY IDTRUCK');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
结果:
IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2
-------------------------------
45 | 75.2 | 46.3
35 | 154 | 69.4
我想要这两个结果合二为一 table :
IDDRIVER | NAMEDRIVER | IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2
---------------------------------------------------------
1 | Michel | 45 | 75.2 | 46.3
2 | Jean | 35 | 154 | 69.4
但我不知道如何将这两个查询结合起来。
我认为 JOIN 可以完成这项工作,但我没有成功。
PS:对不起,我的英语很基础。
编辑:根据 Shadow, it's possible to do this with a left join (here) 但我不知道我必须将查询的不同部分放在哪里才能使它们工作。不是理解的问题,是句法的问题
您可以在动态查询中包含其他表。像这样:
SET @sql = CONCAT('
SELECT d.*, t.IDTRUCK, ', @sql, '
FROM DRIVERS d
JOIN TRUCKS t ON ACTUEL = TRUE AND t.IDDRIVER = d.IDDRIVER;
LEFT JOIN BOXS b ON BOXS.IDTRUCK = t.IDTRUCK
GROUP BY t.IDTRUCK');