我会尽量做到最容易理解,因为我是SQL的初学者。
这就是我的问题,我有一个数据库,里面有调查问卷的答案。
每个数据库都有user.id、unique.id、date、final score。我想用一个简单的表格提取这些数据,该表格按user.id和日期对每个调查问卷的分数进行分组。
我已经尝试过了:
SELECT A.user_id, SUBSTRING(A.created_at,1,10), A.SCORE, B.SCORE,
C.SCORE, D.SCORE, E.SCORE
FROM A
LEFT JOIN B
ON A.user_id = A.user_id AND SUBSTRING(A.created_at,1,10) = SUBSTRING(B.created_at,1,10)
LEFT JOIN C
ON A.user_id = C.user_id AND SUBSTRING(A.created_at,1,10) = SUBSTRING(C.created_at,1,10)
LEFT JOIN D
ON A.user_id = D.user_id AND SUBSTRING(A.created_at,1,10) = SUBSTRING(D.created_at,1,10)
LEFT JOIN E
ON A.user_id = E.user_id AND SUBSTRING(A.created_at,1,10) = SUBSTRING(E.created_at,1,10)
这几乎是成功的,但我发现如果有人没有参与A调查问卷,那么我就没有任何关于它的东西。
我希望,我已经说得足够清楚了。
谢谢大家
发布于 2020-10-21 15:08:01
您必须使用用户表(如果有)来管理查询,如下所示:
SELECT U.user_id, SUBSTRING(A.created_at,1,10), A.SCORE, B.SCORE,
C.SCORE, D.SCORE, E.SCORE
FROM USER U
LEFT JOIN A
ON U.user_id = A.user_id AND SUBSTRING(U.created_at,1,10) = SUBSTRING(A.created_at,1,10)
LEFT JOIN B
ON U.user_id = B.user_id AND SUBSTRING(U.created_at,1,10) = SUBSTRING(B.created_at,1,10)
LEFT JOIN C
ON U.user_id = C.user_id AND SUBSTRING(U.created_at,1,10) = SUBSTRING(C.created_at,1,10)
LEFT JOIN D
ON U.user_id = D.user_id AND SUBSTRING(U.created_at,1,10) = SUBSTRING(D.created_at,1,10)
LEFT JOIN E
ON U.user_id = E.user_id AND SUBSTRING(U.created_at,1,10) = SUBSTRING(E.created_at,1,10)
发布于 2020-10-21 15:12:28
我建议做两件事,这取决于您修改表的限制程度。
testType
或类似下面的内容。您可以使用外键,并且只使用其中的键。这将使记录集更小。然后将所有结果和匹配的关键字放在一个表中。
UNION
如果这些表都是相同的,并且只有不同的条目,则查询此联合。在您的情况下不需要JOIN
,最好调整结构。否则,您可以尝试使用FULL JOIN
来保存所有数据。
https://stackoverflow.com/questions/64458218
复制相似问题