我继承了一个不理想的表结构,并且我正在尽力改进它,而无需拆除和重建。当前,对于所有内容,至少有两个数据级别,即遗留数据和营销覆盖数据。我正在尝试在遗留数据中查找尚未进行营销覆盖的所有记录。

到目前为止,这就是我所拥有的:

SELECT DISTINCT
  old.STYLE_NBR, old.COLOR_NBR
FROM
  LEGACY_PRODUCT_TABLE old
INNER JOIN
  MARKETING_PRODUCT_TABLE new
ON old.STYLE_NBR <> new.style_number AND old.COLOR_NBR <> new.colour_number

这似乎可行,但是需要几分钟才能运行。如果可能的话,我想要一种更有效的方法。

其他资讯:
  • 旧表
  • 中大约有60,000条记录
  • 市场营销表中大约有7,000个
  • STYLE_NBRCOLOR_NBR均为char(5),并且结合使用时,将成为唯一的ID。
  • 最佳答案

    您应该使用LEFT OUTER JOIN并更改您的查找

    SELECT DISTINCT
      old.STYLE_NBR, old.COLOR_NBR
    FROM
      LEGACY_PRODUCT_TABLE old
      LEFT OUTER JOIN MARKETING_PRODUCT_TABLE new
        ON (old.STYLE_NBR + old.COLOR_NBR) = (new.style_number + new.Colour_number)
    WHERE (new.style_number + new.Colour_number) IS NULL
    

    关于sql - 选择不在另一个表中的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/666595/

    10-13 06:50