Mysql извлекает все данные с инклюзивным соответствием другому условию - PullRequest
0 голосов
/ 26 июня 2019

При получении всех данных по некоторым инклюзивным критериям, например, когда имя столбца равно «синему» или «желтому», а «colorval» не равно «100»

> mysql> select * from Colors where colorname is not null;
+-----------+----------+
| colorname | colorval |
+-----------+----------+
| blue      | 100      |
| blue      | 200      |
| blue      | 300      |
| red       | 200      |
| red       | 300      |
| red       | 100      |
| red       | 400      |
| yellow    | 100      |
| yellow    | 200      |
| yellow    | 300      |
+-----------+----------+

и я хочу, чтобы результат был

> 
+-----------+----------+
| colorname | colorval |
+-----------+----------+
| blue      | 200      |
| blue      | 300      |
| red       | 200      |
| red       | 300      |
| red       | 100      |
| red       | 400      |
| yellow    | 200      |
| yellow    | 300      |
+-----------+----------+

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Это необходимое условие:

select * from colors 
where colorname is not null and (colorval <> 100 or colorname not in ('blue', 'yellow')) 

Вам нужно, чтобы colorval не был равен 100, а colorname не должен быть синего, желтого в той же строке.Смотрите демо .Результаты:

| colorname | colorval |
| --------- | -------- |
| blue      | 200      |
| blue      | 300      |
| red       | 200      |
| red       | 300      |
| red       | 100      |
| red       | 400      |
| yellow    | 200      |
| yellow    | 300      |

Если у вас есть только эти 3 цвета, вы можете упростить это так:

select * from colors 
where colorname is not null and (colorval <> 100 or colorname = 'red')
0 голосов
/ 26 июня 2019
select * from Colors where colorname is not null and (colorname ='blue' or colorname='yellow') and colorval <> 100;
0 голосов
/ 26 июня 2019

Так что ваш запрос должен быть

select * from Colors where colorname is not null and colorname = 'blue' and colorname = 'yellow' and colorval != '100' ;
...