mysql - 如何在同一个表中查找相对于另一列的列?

标签 mysql sql

我有下表

  • quizId 是数据库中测验的ID
  • userId 对应于使用相应 quizId 进行测验的用户

    quizId | userId 
      1    |   9
      1    |   10
      1    |   11
      2    |   11
      3    |   11
    
  • 现在,假设 userId 为 9。

  • 我需要一个只返回 quizId 的 2 和 3 的查询

  • 意思是,由于 quizId 1 已被 userId 9 占用,我不再需要它们。

思路是:

  • 在我制作的测验应用程序中,一个人只能参加一次测验。
  • 有一个页面,他可以在其中查看可用测验的列表。
  • 所以我只想显示他尚未参加的测验。
  • 上表是一个 quizLog 表,其中存储了参加该测验的 quizId 和 userId

对不起,但这是我能解释的最好方式。我希望有人能帮助理解和帮助我。而且我无法确定这是否是一个重复的问题,因为我不知道应该搜索哪些关键字。抱歉,如果这是重复的。

编辑:

  • 我有一个名为“quiz”的表,其中存储了测验的详细信息
  • 我有一个名为“users”的表,其中存储了用户详细信息
  • 上面的表格叫做'quizLog'

这是我现有的查询

    SELECT quiz.quizId,quiz.title
    FROM quiz
    JOIN quizlog
        ON quiz.quizId = quizlog.quizId
    WHERE condition

最佳答案

最容易理解的查询是:

select *
from quiz
where id not in (
  select quiz_id
  from user_quiz
  where user_id = 9)

更高级的方法是:

select *
from quiz q
left join user_quiz uq
   on uq.quiz_id = q.id
   and uq.user_id = 9
where uq.user_id is null

join 版本可能在大多数数据库上表现更好。

关于mysql - 如何在同一个表中查找相对于另一列的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18692671/

相关文章:

java - Java并发应用中MySQL死锁MySQLTransactionRollbackException

php - 关于 Yii 事件记录中的重复键更新

php - 有没有办法强制 PHP 等待 MySQL 完成事务?

Mysql连接查询问题

mysql 在使用 group by 和 where 条件时忽略 NULL

mysql - 向查询添加 COUNT 会导致查询卡住

SQL查询以获取已注册英语或乌尔都语类(class)但未同时注册的学生

mysql - 更改表以添加列(默认为 0),然后更新特定行

mysql - 在每个数据库上创建表

MySql 更改了 lower_case_table_names 现在我不能选择表