2010-03-19 40 views
2

我有两个表: 对象object_id列 和具有object_id(FK for object.object_id)和value_type(为了简单起见,我ommited其他列)avalues。选择不存在的所有对象值

我想选择所有没有指定类型值的对象。我的选择是这样的:

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

有没有更有效的方法来做到这一点?

回答

3

NOT INLEFT 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)

+0

感谢的指数,是在LEFT JOIN快得多.. – kane77 2010-03-19 13:47:02