试图用我有限的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