1

我有 2 张桌子

一张有问题的桌子

ID Description
== ===========
1  Some Question
2  Some Question
3  Some Question
4  Some Question

另一个是对每个用户的每个问题的 awsers

ID_USER ID_QUESTION ANSWER
======= =========== =========
1       2           a
1       1           b
1       3           d
2       1           e
2       4           a
3       4           c
3       2           a

如您所见,用户可能没有回答问题,这是我的问题

我目前正在尝试找到用户没有回答的至极答案。

我想要这样的东西

ID_USER ID_MISSING_QUESTION
======= ===================
1       4
2       3
2       2
3       1
3       3

我可以很容易地为单个用户找到缺失的问题,但我不能为每个用户都这样做,因为它们非常多。

谢谢阿约耶

4

3 回答 3

1

又快又脏:

SELECT TB_USER.ID, TB_QUESTION.ID AS "Q_ID" FROM TB_USER, TB_QUESTION
minus
SELECT ID_USER, ID_QUESTION FROM tb_answer

Sql Fiddle 演示在这里。

于 2013-05-25T20:24:32.650 回答
0

您应该在期待完整答案之前发布您尝试过的 SQL 语句,否则有人可能会认为您想让其他人为您编写所有代码......

不过,不要使用普通的 JOIN,而是使用 aFULL OUTER JOIN和 a LEFT OUTER JOINresp。RIGHT OUTER JOIN,取决于您的 SQL 语句中的表排序(您尚未发布),并使​​用IS NULL.

于 2013-05-25T19:36:58.417 回答
0

我想你正在寻找这样的东西:

SELECT
    u.id_user,
    q.id_question
FROM
    questions q
CROSS JOIN users u
LEFT JOIN answers a ON (a.id_question = q.id_question and a.id_user = u.id_user)
WHERE
    a.answer IS NULL

首先,您为每个用户创建每个问题的集合,然后尝试加入您的答案。然后过滤出所有找到答案的结果。:)

于 2013-05-25T19:38:36.807 回答