我的SQLite数据库中有两个表,它们之间有一对多关系:
CREATE TABLE Reads (
RowID INTEGER NOT NULL PRIMARY KEY,
EventDate INTEGER NOT NULL,
Plate TEXT,
State TEXT
);
CREATE TABLE ExplodedPlates (
Plate TEXT,
RowID INTEGER NOT NULL,
PRIMARY KEY (RowID, Plate)
) WITHOUT RowId;
Reads表的Plate列包含车牌。数据可能包含我们称之为“模糊牌照”的内容。例如,板可以包含“A [0Q] C1234”,其中实际的第二字符可以是“0”,“O”或“Q”。在这种情况下,ExplodedPlates表中有三行具有相同的RowID但是Plate是“A0C123”,另一行是“AOC1234”,第三行是“AQC123”。
我需要连接这些表并为每个唯一的RowID返回一行,其中该板匹配与示例中的模式类似的模式。因此,如果用户在搜索框中输入“A [O0] 1234”,则它们应该获得一行,其中“A [0OQ] 1234”,但不是3,以及具有与该字符串匹配的其他RowID的任何行。
我使用类似于此的实体框架编写了一个查询:
SELECT DISTINCT r.*
FROM ExplodedPlates A x
JOIN Reads AS r ON r.RowId = x.RowID
WHERE x.Plate GLOB @Plate
这样可行,但返回的查询使用临时B树来执行DISTINCT。我的老板要我摆脱DISTINCT并使用WHERE EXISTS(SELECT 1 FROM ExplodedPlates WHERE Plate GLOB @Plate)
,但我不知道如何让它工作。我在我的数据库中有一个特定的案例,其中135行与特定模式匹配,但我正在使用的查询返回6557行。显然,这是错误的。
我究竟如何使用WHERE
子句生成匹配读取的唯一列表?
答案 0 :(得分:1)
这可能是你想要的:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"This app can’t access your current location.\n\nTo view nearby posts or create a post at your current location, turn on access for this app to your location in the Settings app under Location Services.", nil) message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Ok", nil), nil];