Как выбрать строки, в которых два столбца не равны значению? - PullRequest
3 голосов
/ 08 марта 2019

У меня есть таблица, где в каждой строке есть category и subcategory.

Я хочу выбрать все строки, кроме определенных category и subcategory.

Мои данные выглядят так:

| category | subcategory |
|----------|-------------|
| Color    | Orange      |
| Fruit    | Apple       |
| Fruit    | Orange      |
| Fruit    | Banana      |

Я хочу, чтобы мой результат выглядел так:

| category | subcategory |
|----------|-------------|
| Color    | Orange      |
| Fruit    | Banana      |

Это то, что я пробовал, но, очевидно, не работает:

SELECT *
FROM table
WHERE
    (category <> 'Fruit' AND subcategory = 'Orange') and
    (category <> 'Fruit' AND subcategory = 'Apple')

Кажется, я не могу понять, как заставить это работать. Есть ли в SQL способ сказать where not (this and this), потому что мне все еще нужна категория "Фрукты", и мне все еще нужна подкатегория "Оранжевые".

Ответы [ 4 ]

3 голосов
/ 08 марта 2019

Так почему бы не попробовать НЕ?

SELECT *
FROM yourtable
WHERE NOT (category = 'Fruit' AND subcategory IN ('Orange', 'Apple'))
2 голосов
/ 08 марта 2019

Вы можете конвертировать в один ниже

SELECT *
FROM table
WHERE
    (category <> 'Fruit' AND subcategory = 'Orange') OR
    (category = 'Fruit' AND subcategory = 'Banana')
1 голос
/ 08 марта 2019

Я не на 100% согласен с тем, что вы спрашиваете, но я считаю, что это то, что вы ищете:

SELECT * FROM table
WHERE NOT (category='Fruit' AND subcategory='Orange') AND NOT (category='Fruit' AND subcategory='Apple');
1 голос
/ 08 марта 2019

Замените второе И на ИЛИ.

Ваш запрос ищет записи, в которых выполняются оба следующих условия:

category <> 'Fruit' и subcategory = 'Orange'

category <> 'Fruit' и subcategory = 'Apple'

Так как подкатегория не может быть одновременно и «Orange», и «Apple», одна или другая ложь, поэтому крайняя AND - ложь.

Вы хотите найти записи, где любой из этих случаев является истинным, поэтому предложение WHERE должно быть:

WHERE
(category <> 'Fruit' AND subcategory = 'Orange') OR
(category <> 'Fruit' AND subcategory = 'Apple')
...