2013-05-22 63 views
0

所以這是我的數據MySQL的:排除一行不滿足條件列表

ID C1  C2    C3 
6    Digit 2   6,8,10,12 
12   Digit 3   15 
15 127  Digit 2   6,7,8,9,10,11,12,13 
68 140,141 Digit 11   85,86,87,88,167,168,158,159 
73 1   Digit 11   85,86,87,88,169,170 
76   Digit 11   85,86,87,91,164,165,166,167,168 
99   Digit 11   20,27,85,86,87 
106   Digit 1   1,2 
111   Digit 11   85,86,87,88 
112   Digit 11   85,86,87,88 
135   Digit 11   85,86,87 

和我的條件字符串(2,6,15,37,42,52,62,65,79, 85,94,100,104,107,113,124,131)

現在,如果值127,140,​​141,1不在列表條件中,我想排除第3,4,5行。我嘗試了不在,但無濟於事。我想我可能會錯過一些基本的東西,但不能得到它。

+0

如果您願意瞭解這一點,使用PHP可能會使這非常容易。 – Max

+2

誰設計了這張桌子?如果是你,那麼你需要重新設計它。 – Kermit

+0

這只是我從另一個表獲得的結果集;我也使用這些Windows窗體 – user1396792

回答

0

如果可能,最好不要在一列中存儲多個值。然後這樣做更容易。

您不能使用「IN」或「NOT IN」,因爲他們正在查找單獨項目的列表。但是C3只是一個恰好有逗號的項目。

試試這個:

SELECT * FROM 
(SELECT ID, C1, C2, CONCAT('|',REPLACE(C3,',','|'),'|') as C3 FROM `table` WHERE `C3`) as t1 

WHERE t1.C3 NOT LIKE "|127|" AND t1.C3 NOT LIKE "|140|" AND t1.C3 NOT LIKE "|141|" AND t1.C3 NOT LIKE "|1|" 

你可以避開 「|」並且只是連續「,」到開始和結束。

或者你可以修復你的數據庫模式,以便它實際上就像一個規範化的關係數據庫。

每個包含多個值的列都應該被分離到自己的表中。

上表中應該沒有列C3。相反,你應該有一個表,some_other_data

在這一點上,我看到C3 = 6與主表中的多個記錄相關。因此,除了some_other_data之外,您實際上還需要第三個鏈接表。見下文。

`some_other_data` 
id 
6 
8 
10 
12 
15 

`main_table_to_some_other_data_link` 
some_other_data_id | main_table_id 
6     6 
8     6 
10     6 
12     6 
15     12 
6     15 

等您可以看到,鏈接表可以包含任一值的重複項。但是您的其他兩張桌子將擁有完全獨特的ID。

+0

好的,重新設計桌子。非常感謝你們。 – user1396792

0

我認爲你試圖解決錯誤的問題。

(我假設你可以改變你的表結構。如果你不能別人需要解決你的問題。)

逗號分隔的數據的長名單,他們有一個標誌與ID一對多的關係。

例如,使數據在C3自己的表:

ID MainID C3 
================ 
1  6  6 
2  6  8 
3  6  10 
4  6  12 
5  12  15 
6  15  6 
7  15  7 
8  15  8 
9  15  9 
10  15  10 
11  15  11 
12  15  12 
13  15  13 
// and so forth // 

所以ID是新表的主鍵,MainID是指記錄在您的主表的外鍵, C3是C3中的數據。

C3的每個單獨值都有自己的記錄。現在

,你在一個位置使用類似

Select * from MainTable 
    Inner Join NewTable 
    On MainTable.ID = NewTable.MainID 
    Where NewTable.C3 Not In (2,6,15,37,42,52,62,65,79,85,94,100,104,107,113,124,131); 

如果可以的話,拉出一個一對多關係到他們自己的表會使事情變得更容易。