我想要对 3 个表进行查询,这将给出如下结果:
我有 USERID
根据此我想从下表中获取数据:
安稳定
ID | ANS | USERID | QUERYID
1 | 123 | 1 | 15
2 | 22 | 0 | 16
3 | 17 | 1 | 10
ANSTABLE 中的 ID 与 ANSVOTABLE 中的 ANSID 映射
可回答
USERID | QUERYID | ANSID | UPVOTE | DOWNVOTE
3 | 15 | 1 | 1 | 0
8 | 15 | 1 | 0 | -1
7 | 15 | 1 | 0 | -1
22 | 16 | 2 | 1 | 0
QUERYID ID 与“QUERYTABLE”中的 ID 映射
查询表
ID | USERID | QUERY | DESCRIPTION
16 | 10 | qwerty | uytrew
15 | 11 | my_data | test_data
10 | 0 | 101010 | 101010
现在我想要一个这样的结果,每当我给出 USERID - 0 OR 1 等时。
它应该从 ANSTABLE
获取与输入的 USERID 相关的所有 queryID
并且根据匹配的queryID的所有记录应该从QUERYTABLE
表返回,并且它还应该给我SUM(UPVOTE)+SUM(DOWNVOTE)作为总计
对应于ANSID && QUERYID 可回答
。
事实上我想要如下所示的结果 如果我输入“userID - 1”,它应该通过添加一列来给我
ID | USERID | QUERY | DESCRIPTION | ANSSCORE
15 | 11 | my_data | test_data | -1
10 | 0 | 101010 | 101010 | 0
请注意,通过计算赞成票和反对票,ANSSCORE 会根据 ANSVOTABLE
的结果变为 -1
。
还要考虑 ANSVOTABLE
中是否不存在相应的 AnsID 和 QueryId,那么在这种情况下,它应该从 Querytable 返回我的记录,其中 o 作为总分
答案将被采纳。
最佳答案
您需要在键
上加入
这3个表,然后使用任何进行2或3度
。group by
您有要求的 where 子句
我认为这可能适合你 -
SELECT q.ID, q.QUERY, q.USERID, vote.UPVOTE + vote.DOWNVOTE as totalVote
FROM QUERYTABLE q
JOIN ANSTABLE ans ON ans.QUERYID = q.ID
JOIN ANSVOTABLE vote ON vote.ANSID = ans.ID
WHERE ans.USERID = 2
GROUP BY q.ID, q.QUERY, q.USERID;
关于mysql - sql中的多级查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50680622/