【问题标题】:Can't figure out sql join无法弄清楚 sql join
【发布时间】:2022-09-28 13:47:03
【问题描述】:

我正在使用 nextcloud 通过表单应用程序、表格跟踪数据oc_forms_v2_submissions包含条目:

SELECT * FROM `oc_forms_v2_submissions` WHERE `form_id` = 3;
+----+---------+--------------------------------------------+------------+
| id | form_id | user_id                                    | timestamp  |
+----+---------+--------------------------------------------+------------+
|  8 |       3 | anon-user-96684f301d22e7be44f07780a9bffe06 | 1663789158 |
|  9 |       3 | anon-user-a1eaa4f939b59e00b403c046410788aa | 1663835954 |
| 10 |       3 | anon-user-440d0dbe9c107492b6ec1a06d98004a8 | 1663942458 |
+----+---------+--------------------------------------------+------------+

第二张表是oc_forms_v2_answers

SELECT * FROM `oc_forms_v2_answers`;
+----+---------------+-------------+-----------------------+
| id | submission_id | question_id | text                  |
+----+---------------+-------------+-----------------------+
| 10 |             8 |           7 | foo                   |
| 11 |             9 |           7 | bar                   |
| 12 |            10 |           7 | foo                   |
+----+---------------+-------------+-----------------------+

所以基本上我需要从表提交中获取所有 id 条目,并将它们与 answer 中的 submit_id 匹配我想从文本柱子。

SELECT oc_forms_v2_submissions.id as submission_id
FROM `oc_forms_v2_submissions` 
RIGHT  JOIN `oc_forms_v2_answers` ON submission_id=oc_forms_v2_answers.submission_id;

到目前为止,这就是我所能想到的,但它只返回 submit_id 字段,并且所有内容都重复了三倍:-D

+---------------+
| submission_id |
+---------------+
|             8 |
|             8 |
|             8 |
|             9 |
|             9 |
|             9 |
|            10 |
|            10 |
|            10 |
+---------------+

编辑:

更新后的查询仍然没有让我得到来自 oc_forms_answers 的字段:

SELECT oc_forms_v2_submissions.id as submission_id
FROM `oc_forms_v2_submissions`
RIGHT JOIN `oc_forms_v2_answers` ON oc_forms_v2_submissions.id=oc_forms_v2_answers.submission_id where form_id=\"3\";

    标签: sql join mariadb


    【解决方案1】:

    那是因为您要与相同的列进行比较,您需要在 ON 子句中的链接列两个都

    您也可以使用别名,以减少打字时间

    RIGHT JOIN 也会将所有答案与提交结合起来,但你永远不会有更多提交作为答案,所以即使没有答案,LEFT JOIN 也会将所有提交

    SELECT oc_forms_v2_submissions.id as submission_id
    FROM `oc_forms_v2_submissions` 
    LEFT JOIN `oc_forms_v2_answers` ON oc_forms_v2_submissions.id=oc_forms_v2_answers.submission_id;
    

    【讨论】:

    • 好吧,那是认真的。然而,更新后的查询仍然没有让我获得来自 oc_forms_answers 的“文本”字段。
    • 哪个更新查询?我没有看到任何尝试,也没有看到应该更新什么。看看你是否可以增加 dbfiddle.uk/L797x0Vm 并发布新链接
    【解决方案2】:

    这应该可以解决问题(只需更新列和表的正确命名)

    SELECT s.id as submission_id, a.txt FROM submissions s 
    LEFT JOIN answers a 
    ON s.id=a.submission_id;
    

    你可以在这里查看db-fiddle。我已使用您的信息创建数据库,因此缺少 WHERE 子句,但其余所有子句都应为您提供所需的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多