У меня есть две таблицы в моей SQLite базы данных с одного до многих отношениях между ними:Возвращающиеся различных строк с использованием предложения WHERE EXISTS (SELECT 1 FROM TABLE)
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;
чтениями столбец Тарелка таблицы содержит номерные знаки. Данные могут содержать то, что мы называем «неоднозначными номерными знаками». Например, пластина может содержать «A [0OQ] C1234», где фактический второй символ может быть «0», «O» или «Q». В этом случае в таблице ExplodedPlates имеется три строки с тем же RowID, но Plate - «A0C123», другой - с «AOC1234», а третий - с «AQC123».
Мне нужно присоединиться к этим таблицам и вернуть одну строку для каждого уникального RowID, где тарелка соответствует шаблону, аналогичному примеру в примере. Поэтому, если пользователь вводит «A [O0] 1234» в поле поиска, они должны получить одну строку с табличкой «A [0OQ] 1234», но не 3, а также любые строки с другими RowID, которые соответствуют этой строке.
Я написал запрос с использованием Entity Framework, подобный этому:
SELECT DISTINCT r.*
FROM ExplodedPlates A x
JOIN Reads AS r ON r.RowId = x.RowID
WHERE x.Plate GLOB @Plate
Это работает, но запрос возвращал использует временную B-Tree сделать DISTINCT. Мой босс хочет, чтобы я избавился от DISTINCT и использовал WHERE EXISTS(SELECT 1 FROM ExplodedPlates WHERE Plate GLOB @Plate)
, но я не знаю, как заставить это работать. У меня есть конкретный случай в моей базе данных с 135 строками, которые соответствуют определенному шаблону, но запрос, который я использую, возвращает 6557 строк. Ясно, что это неправильно.
Как именно я могу использовать это предложение WHERE
, чтобы сгенерировать уникальный список совпадающих чтений?