2015-07-20 57 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 
相關問題