在具有不同值的行上连接两个相同的表

时间:2011-05-11 04:38:20

标签: mysql sql join

我有两个相同的表,一个是行的当前值,另一个是新值。我试图只选择新值表中的行,其中新值表中的任何列具有与旧值表中的列不同的值。我现在使用的查询如下:

SELECT `new`.`item_id` 
  FROM `new_items` AS `new` 
  JOIN `items`  AS `old` 
 WHERE new.item_id = old.item_id
   AND (new.price != old.price || 
        new.description != old.description || 
        new.description_long != old.description_long || 
        new.image_small != old.image_small || 
        new.image_large != old.image_large || 
        new.image_logo1 != old.image_logo1 )

但是,此查询需要花费太长时间才能执行。 MySQL有更好的方法可以做到这一点,还是有人知道更有效的查询?

2 个答案:

答案 0 :(得分:3)

使用:

SELECT n.item_id
  FROM NEW_ITEMS n
 WHERE EXISTS (SELECT NULL
                 FROM OLD_ITEMS o
                WHERE o.item_id = n.item_id
                  AND (o.price <> n.price
                   OR o.description <> n.description 
                   OR o.description_long <> n.description_long 
                   OR o.image_small <> n.image_small 
                   OR o.image_large <> n.image_large 
                   OR o.image_logo1 <> n.image_logo1))

索引所有要比较的列。

答案 1 :(得分:0)

如果item_id(sku)相当独特(表中没有多个重复项item_id),那么只需在item_id上添加索引就可以看到性能大幅提升。