mysql - sql中的多级查询

标签 mysql

我想要对 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/

相关文章:

java - jsp中通过session访问时id太长。

php - 使用 php jquery ajax 从 mysql 获取图像并将它们显示在 DIV 内的 html 页面中

mysql - SQL Group By 组 n?

mysql - SQL 查询将一列中的每个条目与另一列中的每个条目进行比较

mysql - 从包含2亿条记录的表中选择一些记录

php - 使用 MySQL 数据库中的多个选项预填充下拉菜单

mysql - 如果用户是数据库中的根用户,我认为该用户不能同时拥有撤销的权限,对吗?

mysql - 如何在内存数据库中设置 fetchSize?

mysql - Aurora 无服务器未从 CLI 和 mysql 工作台连接

php - 如何插入两个表