Строка выбора SQL, которая не содержит Y, но содержит X - PullRequest
16 голосов
/ 05 октября 2011

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

Пример: я пытаюсь выбрать каждый экземпляр "красного стула", где«красный стул» не сменяется «большим».Если бы я выполнил этот запрос в следующей таблице, я бы получил только строку с идентификатором 2:

+----------+--------------+---------+
| ID       |        content         | 
+----------+------------------------+
| 1        | The big red chair      |
| 2        | I have a red chair     |
| 3        | I have a big chair     |
+----------+------------------------+

Заранее спасибо!

Ответы [ 4 ]

15 голосов
/ 05 октября 2011

Вы можете использовать:

LIKE '%red chair%' AND NOT LIKE '%big%'

edit : исправлено LIKE соответствие строк

4 голосов
/ 05 октября 2011

Это получит то, что вы хотите, при условии, что фраза «красный стул» встречается только один раз в content. Если он может появиться более одного раза («Красный стул - большой красный стул»), какого результата вы хотите?

SELECT * FROM Furniture 
  WHERE content LIKE '%red chair%' AND content NOT LIKE '%big red chair%'
3 голосов
/ 05 октября 2011
WHERE content like '%red chair%'
AND content not like '%big red chair%'

Это не будет быстро, хотя!

0 голосов
/ 06 октября 2011

Выберите строку, которая начинается с X и не содержит X

WITH T 
     AS 
     (
      SELECT * 
        FROM (
              VALUES ('xenophilia'), 
                     ('xbox'), 
                     ('regex')
             ) AS T (c)
     )
SELECT * 
  FROM T
 WHERE c LIKE 'x%'
       AND c NOT LIKE '_%x%';
...