你的问题是,IN子句在这种情况下无用。你拉的值是一个单一的值,所以就发动机而言,你正在寻找只有一个项目上的权利,不管有多少逗号在字符串中:
SELECT DISTINCT
students.Student_Name ,
students.grade_ID ,
books.book_title ,
books.price
FROM (books
INNER JOIN courses ON books.course_ID = courses.course_ID
)
INNER JOIN students ON courses.grade_ID = students.grade_ID
WHERE (students.ID) = 3
AND CStr(books.course_ID) IN ('9,1,2');
当你试图说,但不能这样,
SELECT DISTINCT
students.Student_Name ,
students.grade_ID ,
books.book_title ,
books.price
FROM (books
INNER JOIN courses ON books.course_ID = courses.course_ID
)
INNER JOIN students ON courses.grade_ID = students.grade_ID
WHERE (students.ID) = 3
AND CStr(books.course_ID) IN ('9','1', '2');
有两种解决方案,我能想到的。
第一个也是更好的方法是不使用逗号分隔的字段,而是在学生表和课程表之间创建一个链接表(也称为多对多关系)。链接表包含学生的键和学生可以访问的课程。然后,您将学生加入到链接表中,然后将链接表添加到课程中。
第二,也不太好(也是危险的)可能性是创建一个包含sql语句的变量,然后执行它。如果任何人都可以在该字符串列中放入任何类型的数据,这可能非常非常有问题,我建议不要这样做。
正确设计您的数据库,并使用适当的标准化数据。
看看这有助于: [逗号分隔值 - IN子句(http://www.codeproject.com/Tips/584680/Using-comma-separated-value-parameter-strings-in-S) –
你可以展示表格的学生,课程和书籍的定义吗? – Renzo
感谢您的回复!看到我的解决方案..... – BigHonkingDeal