E
E
EVOSandru62014-11-26 11:52:53
MySQL
EVOSandru6, 2014-11-26 11:52:53

MySQL - How to build a many-to-many output condition so that all elements must be 0?

I agree, I formulated it strangely, in general there are 2 tables, m_zakaz and mc_process.
--------------
m_zakaz
--------------
CODE
NAME
COMPLETE

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

-------------- Related
: m_zakaz.CODE = mc_process.ZAKAZ_CODE
I need to output everything entries from m_zakaz , where m_zakaz.COMPLETE = '0'and (here is a misunderstanding) where all processes for this order have mc_process.COMPLETE = '1'
Something like

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

If at least 1 process has mc_process.COMPLETE = '0', then the order entry must not be selected.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
I
Ivan Gontarenko, 2014-11-26
@dez-fafara

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

R
Rsa97, 2014-11-26
@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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question