检查两个表中的缺失值

时间:2013-08-07 06:24:11

标签: mysql sql join group-by

我有两个表项目和类别。项目可以是多个类别。请检查以下小提琴表。

http://sqlfiddle.com/#!2/6b248/5

现在我需要从两个表中找出缺失的值。我的意思是对于某些项目,在类别表中,类别值为零。对于某些其他项目,其在项目表中具有类别值,但从类别表中完全丢失。对于类别表中的项目,其类别值为零我使用以下查询。

SELECT item_id,itemname,category_name FROM item i JOIN category c ON i.category_id=c.category_id GROUP BY c.item_id HAVING MAX(i.category_id)=0 ORDER BY i.item_name

如何更改它以便从类别表中缺少条目的项目表中获取项目。我需要两个项目,即类别值为零的项目和类别表中缺少的项目。

2 个答案:

答案 0 :(得分:1)

类似

select i.*
from items as i
where
    not exists
    (
         select * 
         from categories as c
         where c.item_id = i.item_id and c.cat_id <> 0
    )

答案 1 :(得分:0)

SELECT i.item_id,i.name,c.cat_name FROM 
items AS i LEFT OUTER JOIN categories AS c ON i.item_id=c.item_id 
GROUP BY c.item_id HAVING MAX(c.cat_id)=0 OR c.cat_name is null
ORDER BY i.name