@Encoder95

MySql. Как проверить список на наличие в базе данных?

Всем добрый день, уже второй день пытаюсь составить запрос, но не могу разобраться, прошу вашей помощи)
У меня База данных в которой миллион строк (в каждой по одному слову), есть список (вне базы данных) который состоит из тысячи строк (в каждой по одному слову).
Возможно ли составить ОДИН запрос, который будет проверять сразу все слова из списка на наличие в базе данных, а остальные допустим убирать?

Например в БД у меня строки:
"one"
"two"
"three"
"four"
"five"
"six"
В списке:
"one"
"five"
"seven"
"eight"
Нужно что бы после запроса у меня остались только "seven","eight".
  • Вопрос задан
  • 425 просмотров
Решения вопроса 1
@dzhebrak
Можно сначала собрать список всех слов, которые нужно найти, с помощью UNION ALL, а затем объединить его с основной таблицей с помощью RIGHT JOIN:

SELECT tt.word from q862089 t
RIGHT JOIN (
	SELECT 'one' AS word 
	UNION ALL SELECT 'five' 
	UNION ALL SELECT 'seven'
	UNION ALL SELECT 'eight'
) tt ON t.word = tt.word
WHERE t.word IS NULL;

В примере q862089 - название основной таблицы, которая содержит все слова; word - поле, которое содержит слово.

Альтернативное решение - через временную таблицу, в которую добавляются все искомые слова:
create temporary table tmp (word VARCHAR(64));
insert into tmp (word) VALUES ("one"), ("five"), ("six"), ('seven'), ('eight');

SELECT tt.word from q862089 t
RIGHT JOIN tmp tt ON t.word = tt.word
WHERE t.word IS NULL;

DROP TABLE tmp;

Запросов несколько, но, возможно, подойдет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы