Фильтр для строки, содержащей слова (строку) из другой таблицы SQL

Итак, я пытаюсь выбрать все строки, содержащие строку, равную значениям из другой таблицы.

SELECT q.QUERY, f.ANONID 
FROM FACTS f
INNER JOIN QUERYDIM q 
ON f.QUERYID = q.ID 
WHERE q.QUERY IN (SELECT city FROM zipcodes);

Q.QUERY — это строка разной длины. Я хочу выбрать все q.QUERY, которые содержат значение, равное любому значению в городе

Пример

one row:
q.QUERY = "this is a city called berlin" 

Другой ряд:

q.QUERY = "in cairo it is nice" 


SELECT city FROM zipcodes = ("berlin","Birmingham","Huntsville",etc..)

Поэтому каждый q.QUERY каждый раз перебирает все города в таблице

Я пытаюсь найти все строки со значениями города

Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
В этой статье мы рассмотрим, как включить доступ Java Lambda к экземпляру AWS RDS MySQL.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать оператор LIKE и полное соединение с почтовыми индексами.

SELECT q.QUERY, f.ANONID 
FROM FACTS f
INNER JOIN QUERYDIM q ON f.QUERYID = q.ID 
INNER JOIN  ( SELECT city FROM zipcodes ) t on q.query like concat('%',t.city, '%');

Должен ли полный присоединиться, присоединиться к чему-то?

Shahin 19.11.2022 16:23

Ответ обновлен .. mysql не использует полное соединение

ScaisEdge 19.11.2022 16:27

Я истек. q.query примерно 100 тысяч. может быть проблема в том, что таблица zicodes имеет несколько столбцов

Shahin 19.11.2022 16:43
Ответ принят как подходящий

Что-то вроде этого, если вы не хотите дублировать строки, если столбец запроса содержит несколько городов:

select q.query, f.anonid 
from facts f
inner join querydim q on f.queryid = q.id 
where exists (select 1 from zipcodes where locate(city, q.query));

Функция locate ищет первую строку во второй строке, возвращая индекс, если она найдена, ноль в противном случае и ноль преобразуется в ложь.

Я истек. q.query примерно 100 тысяч. может быть проблема в том, что таблица zicodes имеет несколько столбцов

Shahin 19.11.2022 16:42

Нет, запрос довольно тяжелый, так как он должен проверять каждый город в почтовых индексах для каждого запроса...

Per Huss 19.11.2022 16:58

Другие вопросы по теме