动态生成包含列的表

时间:2017-06-27 16:35:13

标签: mysql sql

假设我们有一个名为问题的表格,其中包含以下架构和内容

id | name | text
1  | Q1   | Java: some text
2  | Q2   | Python: other text
3  | Q3   | C#: something else

然后一个名为答案的表格就像这样

id | uid | qid | value
1  | 100 | 1   | true
2  | 100 | 3   | false
3  | 101 | 2   | false
4  | 101 | 3   | true

其中qif是问题表的FK,而uid是其他用户表的一个键(这里不重要)

现在我想生成下表:

uid | Java | Python | C#
100 | true | null   | false
101 | null | false  | true

,即每个用户包含从其表中获取的所有不同问题的表,其列名基于其文本动态生成(例如,使用子字符串)

我最初的方法是天真的,使用类似的东西:

SELECT uid, java
FROM answer
LEFT JOIN
  (SELECT a.uid, q.value AS "java"
   FROM answer a
   INNER JOIN question q ON q.id = a.qid
   WHERE q.id=1) java
ON java.uid = u.id

LEFT JOIN
// same for "python", "c#"...
...

即,通过连接附加到每列来生成每列。这当然很少有项目,但我想知道是否有任何替代方法更一般地做,而不必做这些重复的LEFT JOINS

非常感谢任何帮助!

0 个答案:

没有答案