SQLite запрос соответствия только для нескольких строк или одного и того же идентификатора - PullRequest
0 голосов
/ 10 января 2019

У меня есть система, которая помечает файлы текстовыми метками. Каждый файл имеет несколько тегов. Соответствующие таблицы / столбцы:

taggings(fileHash,tagId)
tags(tagId,tagText)

Как найти все tagId, в которых есть строка, где tagText соответствует запросу 1, и другая строка, в которой он соответствует запросу 2? Другими словами, как я могу найти каждый fileHash, который имеет оба из двух тегов, когда теги находятся в отдельных строках, как показано выше?

Есть ли способ сделать это для произвольного числа совпадений?

Я нашел это , которое кажется связанным, но когда я пытаюсь написать такой запрос, я получаю ошибку "Невозможно подготовить оператор".

Пример данных

-осна-

fileHash    tagId
404ba9      1
404ba9      2
e04f90      1
e04f90      3

Метки

tagId       tagText
1           document
2           personal
3           work

Ожидаемый результат

Если пользователь выполнил поиск personal и document, как определено в tags, верните 404ba9, так как оба (404ba9, 1) и (404ba9,2) существуют в taggings.

1 Ответ

0 голосов
/ 10 января 2019

Я бы присоединился к таблицам, имел условие для тегов и посчитал количество совпадений:

SELECT   fileHash
FROM     taggings 
JOIN     tags ON taggings.tagId = tags.tagId
WHERE    tagText IN ('text1', 'text2')
GROUP BY fileHash
HAVING   COUNT(*) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...