根据外表中存在的内容插入或链接记录

时间:2012-02-24 23:54:06

标签: sql postgresql

对我来说,没有真正的方法可以简洁地总结这一点。我有两个数据库表(PostgreSQL 9.x)

第一个包含产品,例如。每个产品都有一个名称和一个唯一的ID。

第二个表包含销售记录,并且具有已售出的每个产品的名称,但不包含ID。我想用Products表中相应唯一条目的'product_id'更新此表。但是,有时,产品名称会显示在Sales表中,而Products表中不存在这些名称。当我找到其中一个时,我想将产品记录添加到Products表中,然后使用新的product_id外键更新该产品名称的销售记录。

我有一些SQL执行第一部分:使用与Products表中的唯一名称对应的product_id更新销售记录。我只需要知道如何首先扫描销售表中的未知产品名称,并在Products表中创建它们。

1 个答案:

答案 0 :(得分:1)

这样的事情:

-- add any products not in products table
INSERT INTO Products(ProductName)
SELECT DISTINCT S.ProductName
FROM Sales AS S
WHERE NOT EXISTS(
    SELECT * 
    FROM Products AS P
    WHERE P.ProductName = S.ProductName
);

-- now just do update