@EVOSandru6

MySQL — Как построить условие на вывод много ко многим, чтобы все элементы обязательно были 0?

Согласен, странно сформулировал, в общем есть 2 таблицы, m_zakaz и mc_process.

--------------
m_zakaz
--------------
CODE
NAME
COMPLETE

--------------

--------------
mc_process
--------------
CODE
ZAKAZ_CODE
NAME
COMPLETE

--------------

Связаны так: m_zakaz.CODE = mc_process.ZAKAZ_CODE

Мне нужно вывести все записи из m_zakaz , где m_zakaz.COMPLETE = '0'и (вот тут непонятки) где все процессы для данного заказа имеют mc_process.COMPLETE = '1'

Что-то вроде

SELECT 
m_zakaz.CODE 
FROM 
m_zakaz LEFT JOIN mc_process ON m_zakaz.CODE = mc_process.ZAKAZ_CODE 
WHERE 
m_zakaz.COMPLETE = '0'
AND( Все процессы для данного заказа имеют mc_process.COMPLETE = '1' )


Если хоть 1 процесс имеет mc_process.COMPLETE = '0', то запись заказа не должна выбираться.
  • Вопрос задан
  • 2301 просмотр
Пригласить эксперта
Ответы на вопрос 2
SELECT m_zakaz.CODE, SUM( IF( mc_process.COMPLETE = 0, 1, 0 ) ) have_zero

FROM  m_zakaz 

INNER JOIN mc_process ON m_zakaz.CODE = mc_process.ZAKAZ_CODE 

WHERE m_zakaz.COMPLETE = '0'

GROUP BY m_zakaz.CODE 

HAVING have_zero = 0
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `m`.`CODE`
    FROM `m_zakaz` AS `m`
    LEFT JOIN (
        SELECT `ZAKAZ_CODE`, COUNT(`ZAKAZ_CODE`) AS `N`
            FROM `mc_process`
            WHERE `COMPLETE` = 0
            GROUP BY `ZAKAZ_CODE`
        ) AS `mc` ON `mc`.`ZAKAZ_CODE` = `m`.`CODE`
    WHERE `m`.`COMPLETE` = 0 AND `mc`.`N` IS NULL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы