#sqlite #pdo
#sqlite #pdo
Вопрос:
Я пытаюсь оптимизировать запрос sqlite (PHP-PDO), выполнив один запрос вместо множества запросов к одним и тем же данным. У меня есть таблица с простой структурой:
word
-----
aaaa
bb
cccc
dddd
ffff
теперь у меня есть список слов aaaa, gg, ffff
. Для каждого из них, если элемент существует в таблице, я возвращаю 1 или 0.
Можно ли сделать это с помощью одного запроса, который с вышеупомянутыми данными вернул бы что-то вроде:
aaaa 1
gg 0
ffff 1
Заранее благодарю вас.
Ответ №1:
Вы можете сделать это с помощью EXISTS
:
WITH cte(word) AS (VALUES ('aaaa'), ('gg'), ('ffff'))
SELECT c.word,
EXISTS (SELECT 1 FROM tablename t WHERE t.word = c.word) exists_in_the_table
FROM cte c
или с LEFT
помощью объединения:
WITH cte(word) AS (VALUES ('aaaa'), ('gg'), ('ffff'))
SELECT DISTINCT c.word, t.word IS NOT NULL exists_in_the_table
FROM cte c LEFT JOIN tablename t
ON t.word = c.word
Если в таблице нет повторяющихся слов, которые вы можете удалить DISTINCT
.
Смотрите демонстрацию.
Результаты:
> word | exists_in_the_table
> :--- | ------------------:
> aaaa | 1
> gg | 0
> ffff | 1