我有两张桌子:
CREATE TABLE instructions (
`id_instruction` INT(11),
`id_step` INT(11)
);
CREATE TABLE steps (
`id_instruction` INT(11),
`id_step` INT(11),
`val` VARCHAR(255)
);
一张表包含说明,另一张表包含步骤。每条指令可能有很多步骤。现在,数据是:
INSERT INTO instructions (`id_instruction`, `id_step`) VALUES (1, 0), (1, 1), (1, 2);
INSERT INTO steps (`id_instruction`, `id_step`, `val` ) VALUES (1, 0, 'One'), (1, 0, 'Two'), (1, 0, 'Three'); /* step 0 */
INSERT INTO steps (`id_instruction`, `id_step`, `val` ) VALUES (1, 1, 'Five'), (1, 1, 'Six'), (1, 1, 'Seven'); /* step 1 */
INSERT INTO steps (`id_instruction`, `id_step`, `val` ) VALUES (1, 2, 'Eight'), (1, 2, 'Nine'), (1, 2, 'Ten'); /* step 2 */
对于每条指令,我希望有两个连接 - 一个连接val
列中的值以用于零步,另一个连接来自同一列的值用于指令的最大步。我知道如何获得最大的步骤以及如何进行单个组连接,但是尝试进行两个连接时,我得到了重复。现在,我的查询如下所示:
SELECT maxstep, i.id_instruction, i.id_step, GROUP_CONCAT(s.val) AS val_0
FROM instructions i
INNER JOIN (
SELECT MAX(id_step) AS maxstep, id_instruction FROM instructions i
GROUP BY i.id_instruction
) i2 ON i2.id_instruction = i.id_instruction
LEFT JOIN steps s ON s.id_instruction = i.id_instruction AND s.id_step = i.id_step
GROUP BY i.id_instruction, i.id_step
它只是连接每对指令步骤的值。但我想再有一个连接,它也会连接maxstep
. 所需的结果应如下所示:
| maxstep | id_instruction | val_0 | val_1 |
| 2 | 1 | One,Two, Three | Eight, Nine, Ten |
PS。我加入而不是仅仅加入 MAX 和分组,因为我想在附加加入中使用它的值来进一步连接。