首页 > 解决方案 > 如何从具有一对多关系的表中随机选择?

问题描述

我有Questions表:

ID      TEXT             DISCIPLINE_ID
1   What is stack?            1
2   The biggest ocean is      1  

我有一个Option表格,其中包含一些问题的所有选项:

ID            TEXT                     IS_CORRECT   QUESTION_ID 
1       It is data structure             TRUE           1 
2          It is game                    FALSE          1 
3          I don't know                  FALSE          1
4          Atlantic                      FALSE          2
5          Pacific                       TRUE           2
6          Indian                        FALSE          2

我应该按学科和所有选项随机选择 15 个问题。这是我的尝试:

  SELECT Q.ID, Q.TEXT, O.ID, O.TEXT, O.IS_CORRECT 
    FROM (
          SELECT ID, TEXT 
             FROM QUESTION 
          WHERE DISCIPLINE_ID = 1 
             ORDER BY RANDOM() LIMIT 15
         ) Q 
       JOIN OPTION O ON O.QUESTION_ID = Q.ID; 

我选择了该学科的所有随机 15 个问题。然后,我加入了他们的选择。但它不起作用。因为,每个问题我有 3 个选项,我应该从上面的查询中得到 45 (3*15) 行。但有时我得到 30 行,有时是 33 行。换句话说,我的查询无法正常工作。我的错误在哪里?

标签: sqlpostgresql

解决方案


问题可能出在数据本身。如果您在某个学科中的Q 数少于 15,那么您将获得少于 45 条此 DISCIPLINE_ID 的记录。首先检查您的数据。


推荐阅读