假设我们有一个名为问题的表格,其中包含以下架构和内容
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
非常感谢任何帮助!