Поиск нескольких столбцов для нескольких значений, показывающих записи, которые соответствуют всем значениям только MySQL - PullRequest
0 голосов
/ 31 мая 2019

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

Допустим, я ищу 2 значения («это» и «это»). Давайте также скажем, что я смотрю в 4 разных столбцах для этих значений. Вот два сценария, которые я выдвинул, но ни один из них не работает правильно, и я объясню каждое.

Использование оператора AND

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    AND column2 LIKE '%this%'
    AND column3 LIKE '%this%'
    AND column4 LIKE '%this%'
    AND column1 LIKE '%that%'
    AND column2 LIKE '%that%'
    AND column3 LIKE '%that%'
    AND column4 LIKE '%that%')

Если я использую оператор AND для своего оператора, тогда каждое значение должно быть в каждом столбце, иначе оператор не будет возвращать никаких записей. Допустим, он находит «this» в column2 и находит «that» в column1. Несмотря на то, что он нашел эти значения в этих 2 столбцах, он по-прежнему не возвращает записей, поскольку эти значения не были найдены в column3 и column 4

Использование оператора ИЛИ

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    OR column2 LIKE '%this%'
    OR column3 LIKE '%this%'
    OR column4 LIKE '%this%'
    OR column1 LIKE '%that%'
    OR column2 LIKE '%that%'
    OR column3 LIKE '%that%'
    OR column4 LIKE '%that%')

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

То, что я пытаюсь выполнить с помощью моего утверждения, - это возвращать только записи, которые содержат оба «this» И «that» в любом из столбцов, даже если другие столбцы могут не содержать этих значений.

Надеюсь, это имеет смысл.

1 Ответ

2 голосов
/ 01 июня 2019

Используйте комбинацию AND и OR.

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    OR column2 LIKE '%this%'
    OR column3 LIKE '%this%'
    OR column4 LIKE '%this%')
AND (column1 LIKE '%that%'
    OR column2 LIKE '%that%'
    OR column3 LIKE '%that%'
    OR column4 LIKE '%that%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...