【问题标题】:MySQL SELECT query where to find records that are not in the related tableMySQL SELECT 查询在哪里查找不在相关表中的记录
【发布时间】:2018-12-19 11:24:07
【问题描述】:

我对编程很陌生,所以在以下场景中我需要一些帮助来查询。

用户表

uid (PK)| name  | score
------------------
   1    | john  | 20
   2    | mary  | 40
   3    | david | 60
   4    | nancy | 80

question_tb 表

qid|question
-------------
1  | a     
2  | b     
3  | c     
4  | d   

question_user 表

quid | user_id (FK) | question_id (FK)
--------------------------------
1    | 1            | 1
2    | 2            | 1
3    | 1            | 2
4    | 3            | 3

如上所示为数据库的表结构。 question_user 表包含特定用户已回答的问题。我想以 DESC 方式获取特定用户尚未回答的问题列表。

【问题讨论】:

标签: mysql


【解决方案1】:

以下查询应该为您提供用户尚未回答的问题。

SELECT *
FROM question_tb as q
LEFT JOIN question_user as qu on q.qid = qu.question_id AND qu.user_id = USER_ID_HERE
WHERE  qu.user_id IS NULL;

【讨论】:

    【解决方案2】:

    如果您想在 DESC 中获取特定用户未回答的问题,请使用以下查询

    SELECT * FROM questions WHERE qid NOT IN (SELECT question_id FROM `question_user` WHERE uid = USER-ID) ORDER BY qid DESC;
    

    【讨论】:

      【解决方案3】:

      试试这个:

      样本数据:

      create table users (uid int, name varchar(10), score int);
      insert into users values
      (1, 'john', 20),
      (2, 'mary' , 40),
      (3, 'david', 60),
      (4, 'nancy', 80);
      create table question_tb (qid int, question char(1));
      insert into question_tb values
      (1, 'a'),     
      (2, 'b'),    
      (3, 'c'),     
      (4, 'd');   
      create table question_user (quid int, user_id int, question_id int);
      insert into question_user values
      (1, 1, 1),
      (2, 2, 1),
      (3, 1, 2),
      (4, 3, 3);
      

      T-SQL:

      select uid, qid from users u
      cross join question_tb q
      where not exists(
          select 1 from question_user
          where u.uid = user_id and q.qid = question_id)
      order by uid, qid
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多