Я пытаюсь использовать расширение json1 для запроса к моей базе данных sqlite и хочу запросить массив json для совпадения нескольких значений и вернуть запись, которая соответствует всем значениям.
Примеры объектов:
Сущность 1:
{
EntityID: 123,
tags: [tag1, tag2, tag3]
}
Сущность 2:
{
EntityID: 234,
tags: [tag2, tag3]
}
В этом примере я хочу запросить теги, которые соответствуют нескольким значениям.Если мой ввод [tag1, tag2]
, то я хочу вернуть только Entity 1
, тогда как если мой ввод tag2
, тогда я хочу вернуть оба объекта.
Запрос, который я ожидал обработать, был
SELECT *
FROM entities, json_each(tags)
WHERE json_each.value IS "tag1"
AND json_each.value IS "tag2"
Но этот запрос не выполняется во всех случаях.Что касается того, почему это не удается, я думаю, что он пытается сопоставить каждое значение массива с tag1
и tag2
, что не так, поскольку каждый элемент имеет только 1 значение.Это допустимо или есть другое объяснение?
Запрос, который сработал для меня в очень конкретном случае проверки [tag1, tag2]
значений и возврата только Entity 1
, равен
SELECT *
FROM entities, json_each(tags)
WHERE json_each.value IS "tag1" OR "tag2"
Я хочу знать, почему это работает в случае выше?Единственное, о чем я могу думать, это то, что он проверяет каждое значение массива на tag1
или tag2
, но я не понимаю, почему он возвращает Entity 1
, который также имеет значение tag3
и делаетне соответствует критериям.Однако в этом случае происходит сбой в большинстве других случаев, например, когда я ищу [tag3, tag4]
, он возвращает обе сущности в этом случае, но не должен возвращать ни одной.Так что это определенно не ответ
Я до сих пор не смог найти правильный способ эффективного запроса и ищу какие-либо предложения.
В идеале, если есть еще более простой способзапросите это тогда, что будет высоко ценится.Я имею в виду что-то, где я даю запросу список значений для тегов, и он соответствует всем им, без необходимости использования AND
/ OR
операторов