#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)