SQL : 모든 항목이 만료 한 모든 고객을 선택

루닌 로마 :

다음 DB 구조를 고려

customer (id)
invoice (id, customer_id)
invoice_item (id, invoice_id, warranty_expiry)

나는 모든 항목이 만료 모든 고객을 선택해야합니다. 여기에 지금까지 무엇을 가지고

select * from customer c
inner join invoice i on c.id = i.customer_id
inner join invoice_item ii on i.id = ii.invoice_id
where ii.warranty_expiry < NOW()
group by c.id
having COUNT(ii.id) // <--- 

내가 뭔가를 넣어야 것처럼 느낀다 HAVING절,하지만 각 클라이언트에 대한 항목의 정확한 수를 필요가 없습니다.

GMB :

당신은 참으로 사용할 수 having주어진 고객이 만료 된 모든 항목이 있는지 확인하기 위해 절을. 이에 체크를 이동하여 작동 warranty_expiry으로부터 where받는 절에 having다음과 같이 절 :

select c.id
from customer c
inner join invoice i on c.id = i.customer_id
inner join invoice_item ii on i.id = ii.invoice_id
group by c.id
having max(ii.warranty_expiry >= NOW()) = 0

참고 select *group by(MySQL의 이전 버전이 할 기본적으로 허용하지만) 잘 따라 가지 않는다. 당신은 당신이에서 유지하려는 열을 열거한다 selectgroup by절.

추천

출처http://10.200.1.11:23101/article/api/json?id=5879&siteId=1