3

我在连接方面遇到了一个小逻辑问题。我有一个回答答案的数据库。架构是:

Question
question_id
question_text

Answers
answer_id
question_id
answer_text

User Responses
user_id
answer_id
question_id

我正在尝试查找用户尚未回答的问题,但我一直收到无效回复。查询如下:

SELECT * FROM questions 
    LEFT JOIN responses ON questions.question_id = responses.question_id 
WHERE user_id != '1'

我的逻辑哪里出错了?

4

6 回答 6

2

尝试使用 IS NULL 的 LEFT JOIN

SELECT q.question_id FROM questions q
    LEFT JOIN responses r ON q.question_id = r.question_id AND r.user_id = 1
WHERE r.question_id IS NULL
于 2012-04-13T11:52:27.847 回答
2

获取用户 id 为 1 的用户未回答的问题

SELECT * FROM questions 
    LEFT JOIN responses ON questions.question_id = responses.question_id 
WHERE responses.question_id IS NULL AND user_id = 1
于 2012-04-13T11:53:10.063 回答
1

另一种可能性是EXISTS半连接。

SELECT *
FROM   questions q
WHERE  NOT EXISTS (
   SELECT * 
   FROM   responses r
   WHERE  r.question_id = q.question_id
   AND    r.user_id = 1
   );
于 2012-04-13T12:12:22.257 回答
1

与其使用左连接,不如使用子查询。这就是你在 MS SQL 中的做法——你可能需要针对 MySQL 进行调整。

SELECT * FROM questions WHERE question_id NOT IN (
    SELECT question_id FROM responses WHERE user_id = 1
)

需要检查右表中的值的左连接可能会让您头疼。我发现以这种方式查询这种特定类型的查询更容易、更可靠。

于 2012-04-13T11:53:24.667 回答
1

尝试这个

SELECT * FROM questions 
LEFT JOIN responses ON questions.question_id = responses.question_id AND 
user_id != '1'

最后使用 where 将导致过滤两个表,结果为空。

于 2016-02-22T12:24:43.223 回答
0

尝试这个:

Select * 
from Question
where question_id not in (select question_id from Responses where user_id=1)
于 2012-04-13T12:05:32.490 回答