2013-07-05 69 views
2

預先感謝您提供的任何幫助。今天早上我一直呆在這個幾個小時,沒有找到任何東西似乎有所幫助。MYSQL從子查詢列表中選擇項目

我存儲與客戶端在我的數據庫喜歡此相關的字符串帳戶的列表:

| li.client_accounts | 
    +-----+----------------+ 
    |ID |facility  | 
    +-----+----------------+ 
    |23 |1010, 1020, 1025| 
    +-----+----------------+ 

我想選擇另一個數據庫約會在帳號使用在列表子查詢是這樣的:

SELECT * FROM li_appointments.li_appointments 
    where app_client_id in (select facility from li_client_accounts where id = 23) 

但是,我的結果只顯示約會的client_id 1010,忽略其餘。我需要做些什麼來完成這項工作?

+1

你完全可以改變你的表的設計嗎?將多個值粘貼到單個字段中違反了第一種正常形式 - 這就是爲什麼這樣的查詢不能正常工作的原因。 –

回答

5

這不起作用,因爲IN子句需要一個字段列表。但是,在您的情況下,facility是逗號分隔值的字符串,而不是查詢列表。這是糟糕的設計。你需要讓你的client_accounts表原子,如:

| li.client_accounts | 
    +-----+----------------+ 
    |client_ID |facility | 
    +-----+----------------+ 
    |23 |1010| 
    |23 |1015| 
    |23 |1020| 
    +-----+----------------+ 
+0

你說得對。我認爲我試圖懶惰與我的PHP代碼。感謝你把我推向正確的方向, –

0

不能使用IN()這樣。

你實際上得到什麼是這樣的:

SELECT * FROM li_appointments.li_appointments 
    where app_client_id in ('1010, 1020, 1025') 

這顯然不是你想要的。

如果您想以關係方式使用它,您需要認真考慮標準化您的facility列。