2016-12-13 2 views
0

Я пытаюсь сделать эту работу запроса, вот моя логика, я пытаюсь выбрать запись тот не существует по крайней мере не один из этих вариантов:Несколько не exsits в MYSQL, чтобы проверить количество строк

1). status = Approved AND end_date >now 
2). status =Approved AND end_date is NULL 
3). status = Pending And end_date is NULL & COUNT(id) =1 
4). status =Pending AND end_date >now & COUNT(id) =1 
5). status =Pending AND end_date <now & COUNT(id) =1 

как это сделать, это то, что у меня есть до сих пор. Я не уверен, как проверить COUNT (id) = 1 в условиях 3, 4 и 5?

SELECT 
    * 
FROM 
    outreach 
WHERE 
    NOT EXISTS (
     SELECT 
      * 
     FROM 
      outreach_links 
     WHERE 
      outreach_links.outreach_id = outreach.id 
     AND STATUS = "Approved" 
     AND end_date > now() 
    ) 
AND NOT EXISTS (
    SELECT 
     * 
    FROM 
     outreach_links 
    WHERE 
     outreach_links.outreach_id = outreach.id 
    AND STATUS = "Approved" 
    AND end_date IS NULL 
) 
AND NOT EXISTS (
    SELECT 
     * 
    FROM 
     outreach_links 
    WHERE 
     outreach_links.outreach_id = outreach.id 
    AND STATUS = "Pending" 
    AND end_date > now() 
) 
AND NOT EXISTS (
    SELECT 
     * 
    FROM 
     outreach_links 
    WHERE 
     outreach_links.outreach_id = outreach.id 
    AND STATUS = "Pending" 
    AND end_date IS NULL 
) 
AND NOT EXISTS (
    SELECT 
     * 
    FROM 
     outreach_links 
    WHERE 
     outreach_links.outreach_id = outreach.id 
    AND STATUS = "Pending" 
    AND end_date < now() 
) 

ответ

0
select 
    o.*, 
    SUM(if(ol.status = "Approved" and (ol.end_date > now() or end_date is null), 1, 0)) as cond1, 
    SUM(if(ol.status = "Pending" and (ol.end_date != now() or end_date is null), 1, 0)) as cond2 
from 
    outreach o 
left join 
    outreach_links ol on ol.outreach_id = o.id 
group by 
    o.id 
having 
    cond1 = 0 and cond2 != 1 
; 

Не уверен, что это вы ищете, но вы можете попробовать. cond2! = 1 делает ваше условие COUNT (id) = 1 (если в outreach_links имеется более одного связанного id, cond2 будет больше 1)

+0

wuar is! = Now? У меня нет этого условия, у меня есть> или меньше или нулевое – user3150060

+0

, потому что 4)> сейчас, 5) <сейчас и 3) не равно нулю. Это дает нам! = Сейчас ... l – Alexey

+0

Я получил его на работу, но мой вопрос, если я хочу выбрать ol.cost из MAX (ol.end_date), как я могу это сделать? – user3150060

Смежные вопросы