Oracle SQL如何为不同用户查找缺失值

时间:2013-05-25 19:16:31

标签: sql oracle plsql

我有2张桌子

一个有问题的表

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

另一个与每个用户的每个问题有关的问题

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

我可以很容易地找到单个用户的遗漏问题,但我不能为每个用户做到这一点,因为它们非常多。

谢谢Ayoye

3 个答案:

答案 0 :(得分: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 Demo here.

答案 1 :(得分:0)

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

然而,使用FULL OUTER JOINLEFT OUTER JOIN resp而不是简单的JOIN。 RIGHT OUTER JOIN,取决于SQL语句中的表排序(您尚未发布),并使​​用IS NULL进行过滤。

答案 2 :(得分: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

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