我有2个表:问题和测验。
测验是一系列问题。
测验表如下所示:
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提取它。
答案 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桌设计。
问题表
测验表
Quiz_Question表
..如果你使用3表设计,查询将如下所示:
SELECT qs.*
FROM Questions qs
INNER JOIN Quiz_Questions qq
ON qq.QuestionID=qs.ID
WHERE qq.QuizID = 2