【问题标题】:check missing values across two tables检查两个表中的缺失值
【发布时间】:2013-08-08 09:31:44
【问题描述】:

我有两个用于项目和类别的表。一个项目可以属于多个类别。请检查以下小提琴的表格。

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

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

【问题讨论】:

    标签: mysql sql join group-by


    【解决方案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
        )
    

    【讨论】:

    • 如果我从大约 25000 个结果的表中进行选择,在性能方面还可以吗?
    • 我认为如果你有适当的索引,你可以试试
    • 我还需要从类别表中获取类别名称。我怎样才能找回它?现在我只从 items 表中获取行。
    • 您需要每个项目的所有类别吗?
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多