如何从具有一对多关系的表中随机选择?

时间:2020-07-25 05:04:35

标签: sql postgresql

我有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行。换句话说,我的查询无法正常工作。我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

问题可能出在数据本身上。如果您在某些学科上少于15个问题,则此DISCIPLINE_ID的记录少于45个。首先检查您的数据。