Выбор записей с помощью IF в предложении where?

#mysql #select

#mysql #выберите

Вопрос:

Мне нужно извлечь некоторые данные из таблицы

Например:

  ------------- ------------ ------------- ------------   
| Code        | Progress   |   QTY       | Faulty     |
 ------------- ------------ ------------- ------------   
| A           | 10         |      100    |    0       |                 
 ------------- ------------ ------------- ------------ 
| B           | 1          |      10     |    0       |                 
 ------------- ------------ ------------- ------------ 
| C           | 4          |      0      |    1       |                 
 ------------- ------------ ------------- ------------ 
| D           | 7          |      100    |    0       |                 
 ------------- ------------ ------------- ------------ 


SELECT Code, Progress, QTY, Faulty 
FROM myTable 
WHERE Progress <> 7 AND Progress = 4 AND QTY > 0
  

Как выбрать все записи, которые имеют
— Прогресс <> 7
— и прогресс 4, но только когда количество строк с прогрессом для больше 0
— и значение ошибки равно 1?

Комментарии:

1. Пожалуйста, поделитесь своим текущим запросом. Я думаю, вам не нужно IF .

Ответ №1:

Пожалуйста, попробуйте

 SELECT 
Code, 
Progress, 
QTY, 
Faulty 
FROM myTable 
WHERE Progress NOT IN(4,7)
      OR (Progress = 4 AND QTY > 0 AND Faulty = 1)
  

Объяснение:

Подобное условие Progress <> 7 приведет к появлению записей, имеющих Progress = 4 . Эта конкретная запись может не иметь QTY > 0 AND Faulty = 1 .

Вот почему используйте Progress NOT IN (4,7) в качестве первого условия.

Теперь вам нужно беспокоиться о вашем втором случае, который довольно прост, как вы упомянули.

(Progress = 4 AND QTY > 0 AND Faulty = 1)

Записи, имеющие Progress = 4 having QTY >0 and Faulty = 1 , будут внесены в конечный набор результатов.

Комментарии:

1. Это работает, но мне нужно скрыть записи, у которых прогресс = 4 и кол-во = 0. Правила таковы: показывать все записи с прогрессом, отличным от 7, и скрывать записи, у которых прогресс 4 и кол-во = 0

2. Записи, имеющие progress = 4 and QTY = 0 , не должны отображаться в наборе результатов. Пожалуйста, поделитесь запросом, который вы пробовали.

3. Извините, сейчас работает. Проблема с моей IDE… Спасибо всем

Ответ №2:

 select * from table
where Progress<>7 
and Progress in (select Progress from table t where QTY>0 and Faulty =1)