INNER JOIN + IN条件不起作用

时间:2013-08-17 19:53:37

标签: mysql sql

我有2个表:问题和测验。

测验是一系列问题。

测验表如下所示:

QuizdId | QuestionIds(NVARCHAR50)

  1    | 1,2,3,4,5
  2    | 6,7,8,9

问题表的结构无关紧要。它的主键是ID(整数)

对于给定的问题ID,我想选择所有问题数据

此SQL不起作用(提供语法错误)

SELECT qs.* FROM Questions AS qs
INNER JOIN Quiz AS qz on qs.ID IN (qz.QuestionIds)
WHERE qz.QuizId = 2;

SQL错误:#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'qz.QuestionIds附近使用正确的语法,其中qz.QuizId = 2

以下SQL没有给出预期的结果。它只给出了ID为6的问题。我猜原因是QuestionIds(在Quiz表中)是nvarchar字段,而ID(在问题表中)是整数。

SELECT * FROM Questions WHERE ID IN (SELECT QuestionIds FROM Quiz WHERE QuizId = 2)

我该怎么办?

我想通过SQL / Procedures / Routines提取它。

1 个答案:

答案 0 :(得分:5)

您可以使用FIND_IN_SET()加入两个表格,

SELECT  qs.*
FROM    Questions qs
        INNER JOIN Quiz qz
            ON FIND_IN_SET(qs.ID, qz.QuestionIDs) > 0
WHERE   qz.QuizID = 2

但我建议的方法是将你的桌子标准化为3桌设计。

问题表

  • QuestionID(PK)
  • QuestionText
  • 其他栏目......

测验表

  • QuizID(PK)
  • 其他栏目......

Quiz_Question表

  • QuestionID(FK) - 带QuizID的主键
  • QuizID(FK)

..如果你使用3表设计,查询将如下所示:

SELECT  qs.*
FROM    Questions qs
        INNER JOIN Quiz_Questions qq
            ON qq.QuestionID=qs.ID
WHERE   qq.QuizID = 2