你的問題是,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