Mysql 如何相对于同一表中的另一列查找列?

Mysql 如何相对于同一表中的另一列查找列?,mysql,sql,Mysql,Sql,我有下表 quizId是db中测验的ID userId对应于使用相应quizId进行测验的用户 quizId | userId 1 | 9 1 | 10 1 | 11 2 | 11 3 | 11 现在,考虑用户ID为9。< /P> 我需要一个只返回quizId的2和3的查询 也就是说,由于Quizid1是由userid9获取的,所以我不再需要它们了 这个想法是: 在我正在制作的测验应用程序中,一个人只能参加一次测验。 有一

我有下表

quizId是db中测验的ID userId对应于使用相应quizId进行测验的用户

quizId | userId 
  1    |   9
  1    |   10
  1    |   11
  2    |   11
  3    |   11

现在,考虑用户ID为9。< /P> 我需要一个只返回quizId的2和3的查询

也就是说,由于Quizid1是由userid9获取的,所以我不再需要它们了

这个想法是:

在我正在制作的测验应用程序中,一个人只能参加一次测验。 有一个页面,他可以看到可用测验的列表。 所以我只想展示他还没有参加的测验。 上表是一个quizLog表,其中存储了参加该测验的quizId和userId 对不起,这是我能解释的最好的方式。我希望有人能帮助理解和帮助我。我无法确定这是否是一个重复的问题,因为我不知道应该搜索哪些关键字。对不起,如果这是重复的

编辑:

我有一个名为“测验”的表,其中存储测验详细信息 我有一个名为“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版本在大多数数据库上的性能可能更好。

您还需要使用存储测验的表。如果你从quizLog表中取出quizId,你将只看到已经有人拿走的quizId,因此新的quizId将永远不会出现

您可以在quizLog表上进行左连接,并在没有匹配项的地方获得测验

select q.quizId
from quiz q
left join quizLog l on l.quizId = q.quizId and l.userId = 9
where l.quizId is null
试试这个:

Declare @UserID=9

select quizId  from quiz as q1
where quizId not in (
  select quizId from quiz  as q2 
  where userId  = @UserID)

获取将返回用户未回答的问题列表的查询。您必须编写以下查询

选择quizId,title 来自测验 奎齐德不在哪里 选择奎齐德 来自quizLog 其中userId='9' ;
这个想法是,当您在第一个查询中使用join时,您将只得到quizLog中用户没有做的测验。这意味着,如果测验表中有十个测验,而quizlog中有三个测验,那么当我们知道9号用户是userId时,你会发现他并没有只做2和3。因此,避免在第一选择中加入。因此,它可以用于第二次选择。

这应该可以通过子查询解决。。。WHERE NOT EXISTS子查询WHERE userId=yourvalue-看看这里:您需要一个单独的测验表,这样您就可以识别出还没有人参加过的测验。从QuizList中选择q.QuizID作为q,其中q.QuizID不在QuizzesTaken中选择T.QuizID作为T,其中T.UserID=9;应该有效——这可能不是最有效的方法。您现有的设计只允许您识别至少有一个用户参加但您指定的用户未参加的测验,您必须努力才能正确完成。另外,请记住给每一张桌子都起一个名字——让人恼火的是,不仅仅是你忘了给他们的桌子起名字!对此我很抱歉。我有一个名为“quick”的表,其中存储了测验详细信息,还有一个名为“users”的表,其中存储了用户详细信息。这个表是“quizLog”,其中存储了测验的详细信息和参加测验的用户。