2015-07-20 56 views
0

我必须在具有逗号分隔值(当然ID)的表中的列.... IN (students.courseids)使用逗号delimeted一列的查询,我想在下面的查询使用值

它不起作用:-)

如果我用IN(1,3,9)替换列值,它工作正常。

在此先感谢您的帮助!

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(students.courseids); 
+0

看看这有助于: [逗号分隔值 - IN子句(http://www.codeproject.com/Tips/584680/Using-comma-separated-value-parameter-strings-in-S) –

+0

你可以展示表格的学生,课程和书籍的定义吗? – Renzo

+0

感谢您的回复!看到我的解决方案..... – BigHonkingDeal

回答

0

你的问题是,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语句的变量,然后执行它。如果任何人都可以在该字符串列中放入任何类型的数据,这可能非常非常有问题,我建议不要这样做。

正确设计您的数据库,并使用适当的标准化数据。

+0

你是对的!我创建了一个链接表,一切都很好:-)感谢所有的输入! – BigHonkingDeal

0

尝试做

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 InStr(CStr(books.course_ID), students.courseids) > 0 
相关问题