2

我有 3 张桌子。我需要加入其中的 2 个并让联接枢轴连接表以返回行中的值。请阅读以下内容进行说明。

Table 1:
t1ID   Title
01     Title 1
01_01  Title 1a
01_02  Title 1b
01_03  Title 1c
02     Title 2
02_01  Title 2a
02_02  Title 2b

... 等等

Table 2 (not used in my join, but shown to see relationship between 3 tables -- contains a fixed number of rows which is 10):
t2ID  Description
01    Desc A
02    Desc B
03    Desc C
...
10    Desc J


Table 3:
t1ID   t2ID  Value
01     01    A
01     02    B
...
01     10    C
01_01  01    D
01_01  02    E
...
02_01  10    F
02_02  01    G
02_02  02    H

...等等

我想加入表 1 和表 3,t1ID其中表 1 是主要或主表,表 3 提供了详细值。我需要订购表 3t2ID以保持顺序,以便正确处理输出。

我希望查询结果如下所示:

row[0]    row[1]  row[2] ... row[10]
Title 1   A       B          C
Title 1a  D       E

所以我需要每一行将输出数组中的第一项作为标题,然后输出数组的第 2 到第 11 项来自连接表 3。

希望这是有道理的。

感谢您在这方面帮助我。

已修改(越来越近,或者至少我不再有派生别名错误消息):

SELECT t1.t1ID, t1.Title, GROUP_CONCAT(t3.Value) AS value
FROM Table1 AS t1
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID
GROUP BY t3.t1ID
ORDER BY t1.t1ID

我现在需要做的就是在 t2ID ORDER 中对表 3 进行排序

有人可以帮忙吗?

4

2 回答 2

2

group_concat()您可以按如下方式对输出进行排序:

SELECT
    t1.t1ID,
    t1.Title,
    GROUP_CONCAT(t3.Value order by t2ID) AS value
FROM Table1 AS t1
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID
GROUP BY t3.t1ID
ORDER BY t1.t1ID

注意通话order by 的。group_concat()

于 2013-02-22T14:41:18.373 回答
1

你不能用 MySQL 轻松地做到这一点,但这个GROUP_CONCAT功能可能对你有用。查询将如下所示:

SELECT Title, GROUP_CONCAT(Value) AS values
FROM Table1 AS t1
    JOIN (
        SELECT t1ID, Value FROM Table3 ORDER BY t2ID ASC
    ) AS t2 USING(t1ID)
GROUP BY t1ID

此查询的结果将类似于

Title    | values
---------|-------
Title 1  | A,B,C
Title 1a | D,E

然后,您应该能够将值字符串分解为数组。如果您绝对必须实际旋转数据,这个问题有更多有用的信息。

编辑: Bohemian 是正确的,他的方法比我的好,因为它使用 aJOIN而不是子查询。

于 2013-02-21T22:19:28.633 回答