代码之家  ›  专栏  ›  技术社区  ›  kane77

选择不存在值的所有对象

  •  2
  • kane77  · 技术社区  · 14 年前

    我有两张桌子: 具有对象列的对象 以及具有object_id(fk表示object.object_id)和value_type(为简单起见,我将其他列编入命令)的值。

    我要选择所有没有指定类型值的对象。我的选择如下:

    SELECT object_id FROM object WHERE NOT EXISTS (SELECT true FROM avalues v WHERE v.value_type = 10 and v.object_id = object_id); 
    

    有更有效的方法吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Quassnoi    14 年前

    NOT IN LEFT JOIN / IS NULL 效率略高:

    SELECT  object_id
    FROM    object
    WHERE   object_id NOT IN
            (
            SELECT object_id
            FROM   avalues v
            WHERE  v.value_type = 10
            )
    

    SELECT  o.object_id
    FROM    object o
    LEFT JOIN
            avalues v
    ON      v.object_id = o.object_id
            AND v.value_type = 10
    WHERE   v.object_id IS NULL
    

    确保你有一个索引 avalues (object_id, value_type)