sql server - 如果不存在则插入其他更新

时间:2016-11-11 20:22:21

标签: sql-server

我这里有100种商品味道的清单。然后我有一张桌子,我需要记录每种口味的每个项目。所以,如果我有50个项目,我需要为此表格中的50个项目中的每个项目提供100条记录。所以最后这张表中总共会有100x50条记录。

我现在拥有的是随机混合的数据,我知道我没有为每个项目记录每种类型的风味。

我需要帮助的是,一个想法/算法可以解决这个问题。伪代码会做。我有一个包含所有可能风格的表(tbl_flavor)和一个包含所有50个项目的表(tbl_items)。这两个将决定需要在table_A中放置什么,这基本上是一个库存。

请指教。

3 个答案:

答案 0 :(得分:1)

有几种方法可以解决这类问题。以下是其中一种方法的伪代码。

Update table
set Col1 = SomeValue
where MyKeys = Mykeys

if (@@ROWCOUNT = 0)
begin
    Insert table
    (Cols)
    Values
    (Vals)
end

或者您可以使用MERGE。 https://msdn.microsoft.com/en-us/library/bb510625.aspx

答案 1 :(得分:1)

如果我正确理解您的问题,SQL Server EXCEPT查询将有所帮助。

正如评论中已经指出的,这里是如何获得项目和口味的矩阵:

SELECT Items.Item, Flavors.Flavor
FROM Items
CROSS JOIN Flavors

以下是如何获取项目和风格的矩阵,省略了其他表格中已有的组合。

SELECT Items.Item, Flavors.Flavor
  FROM Items
  CROSS JOIN Flavors
EXCEPT SELECT Item, Flavor
  FROM Table_A

所以INSERT成为:

INSERT INTO Table_A (Item, Flavor)
SELECT Items.Item, Flavors.Flavor
  FROM Items
  CROSS JOIN Flavors
EXCEPT SELECT Item, Flavor
  FROM Table_A

此查询未经测试,因为我不能100%确定该问题。如果你发布更多细节,我会测试它。

答案 2 :(得分:0)

试试这个

UPDATE MyTable
        SET
        ColumnToUpdate = NewValue
        WHERE EXISTS
        (
            SELECT
                1
                FROM TableWithNewValue
                    WHERE ColumnFromTable1 = MyTable.ColumnName
        )

INSERT INTO MyTable
(
    Column1,
    Column2,
    ...
    ColumnN
)
SELECT
    Value1,
    Value2,
    ...
    ValueN
    FROM TableWithNewValue
        WHERE NOT EXISTS
        (
            SELECT
                1
                FROM MyTable 
                    WHERE ColumnName = TableWithNewValue.ColumnFromTable1 
        )