объединяя "LIKE", "NOT LIKE" и "OR" - PullRequest
0 голосов
/ 07 июня 2018

Я изучаю MySQL, и я пытался скомбинировать «НЕ НРАВИТСЯ» с «ИЛИ» в моих запросах напрасно.

Предполагая, что у меня есть таблица 1 с одним столбцом под названием «слово», как показано ниже:

              word
        1      SPAS
        2      SPAM
        3     HILAS
        4     BAMM
        5     ASCAR
        6      CASE
        7     ASHISPA

если запустить этот код:

   SELECT * FROM table1
                            WHERE table1.word LIKE '%AS%' AND
                             table1.word LIKE '%SP%';

Я получаю

       word
   1    SPAS
   7 ASHISPA

Когда я объединяюсь с "НЕ НРАВИТСЯ", как показано ниже:

         SELECT * FROM table1
                            WHERE table1.word LIKE '%AS%' AND
                            table1.word LIKE '%SP%' AND
                            table1.word NOT LIKE '%HI%';

Я получаю следующее:

      word
    1 SPAS

Когда я запускаю запрос с "ИЛИ", как показано ниже:

  SELECT * FROM table1
                            WHERE table1.word LIKE '%AS%' or
                             table1.word LIKE '%SP%';

Я получаю результаты как:

          word
     1    SPAS
     2    SPAM
     3   HILAS
     5   ASCAR
     6    CASE
     7 ASHISPA

Чтобы опустить 'HILAS' и 'ASHISPA', попытались:

  SELECT * FROM table1
                            WHERE table1.word LIKE '%AS%' OR
                            table1.word LIKE '%SP%' AND
                            table1.word NOT LIKE '%HI%'

и получили:

         word
     1    SPAS
     2    SPAM
     3   HILAS
     5   ASCAR
     6    CASE
     7 ASHISPA

Как можно использовать «ИЛИ» для запроса слов с «SP»'и' КАК 'и используйте «НЕ НРАВИТСЯ», чтобы исключить тех, у кого есть «HI», и получите следующие результаты:

          word
     1    SPAS
     2    SPAM                
     5   ASCAR
     6    CASE

1 Ответ

0 голосов
/ 07 июня 2018

Если я правильно понимаю, вам просто нужны круглые скобки:

WHERE (table1.word LIKE '%AS%' OR table1.word LIKE '%SP%') AND
      table1.word NOT LIKE '%HI%'

Вы должны всегда использовать круглые скобки при смешивании AND и OR.

...