Как найти записи в таблице на основе поля идентификатора другой таблицы в MySQL? - PullRequest
0 голосов
/ 16 июня 2020

У меня в таблице companies есть эти строки:

+----+-------------+--------------+
| id | name        | city         |
+----+-------------+--------------+
| 1  | MY Company  | New York     |
| 2  | SampleComp  | Washington   |
| 3  | TestCompany |              |
| 4  | Your Inc.   |              |
+----+-------------+--------------+

В таблице discount_filters эти строки:

+----+-------------+--------------+
| id | name        | city         |
+----+-------------+--------------+
| 10 |             | New          |
| 20 |             | York         |
| 30 | Sample      |              |
+----+-------------+--------------+

В момент поиска я знаю только id компании.

Как я могу найти все записи из discount_filters, которые соответствуют моему companies.id? В базе более 10.000 компаний и более 1000 дисконтных фильтров. В обеих таблицах много столбцов.

Если companies.id равно 1, я хочу вернуть фильтры Discount_filters с идентификаторами 10 и 20.

Если companies.id is 2 Я хочу вернуть фильтры Discount_filters с идентификатором 30.

Если companies.id равно 4, я не хочу ничего возвращать.

Is есть ли обратный выбор логи c в SQL?

1 Ответ

1 голос
/ 16 июня 2020

Вы можете поместить некоторые условные logi c в условия соединения:

select c.*, d.name, d.city
from companies c
inner join discount_filters df
    on c.name like concat('%', df.name, '%')
    or c.city like concat('%', df.city, '%')

Обратите внимание, однако, что это очень неэффективный способ продолжения. Условное logi c вместе со строковыми функциями и сопоставлением с образцом исключает использование существующих индексов. Вам лучше приложить усилия для исправления данных в таблице discount_filters, чтобы вы могли выполнить правильное соединение с прямым поиском по индексу.

...