試圖用我有限的SQL知識來解決這個問題,並且我被卡住了。 :)SQLite:如何在不返回重複行的情況下搜索多個列?
這是在SQLite 3和Python 3。
我已經'JOIN'ed 2表(名稱和數據)。
我想在用戶提供的文本(不區分大小寫)的結果中搜索2列。如果在任一列中找到匹配項,則返回該行。
我遇到的問題是,如果在名稱列中找到文本,我會得到多行返回(我猜是因爲有多行名稱)。
所需要的數據是「名_ID」
下面是一個樣機的連接(有我在這裏沒有包括其他列):
-------------------------------------------------------------------
| name_id | name | data_id | data |
-------------------------------------------------------------------
| 100 | John Smith | 200 | grey hair |
| 100 | John Smith | 201 | hairy teeth |
| 101 | Jerry Jones | 202 | white teeth |
| 103 | Barry Johnson | 256 | brown hair |
-------------------------------------------------------------------
所以,如果我搜索「牙齒」,我得到:
| 100 | John Smith | 201 | hairy teeth |
| 101 | Jerry Jones | 202 | white teeth |
,如果我搜索 「毛」,我得到:
| 100 | John Smith | 200 | grey hair |
| 100 | John Smith | 201 | hairy teeth |
| 103 | Barry Johnson | 256 | brown hair |
,或者,如果我搜索「約翰」,我得到:
| 100 | John Smith | 200 | grey hair |
| 100 | John Smith | 201 | hairy teeth |
| 103 | Barry Johnson | 256 | brown hair |
但我真正想要的是根據每個「名_ID」,因此只返回一行:
| 100 | John Smith | 200 | grey hair |
| 103 | Barry Johnson | 256 | brown hair |
剩下的SQLite的命令如下:
WHERE data LIKE "%john%" OR name LIKE "%john%" COLLATE NOCASE
我已經嘗試使用'DISTINCT',但它似乎根據指定的列刪除重複的行。這些缺少的行包含的數據不會被搜索。
謝謝。
你在這種情況下會發生什麼?當多行符合您的標準時,您的應用程序應該如何運作? – karlosss
如果你只是想要每個'name_id'的第一行,你可以使用'GROUP BY name_id'但我相信返回結果的順序是由'WHERE'子句的順序決定的。 – Adam