带有重复id的sql insert查询

时间:2014-01-16 17:12:44

标签: sql

我有id列和param列的表<​​/ p>

我尝试仅在此参数不存在的情况下添加一些参数

例如我的表是:

+--+-----+
|id|param|
+--+-----+
|2 |a    |
+--+-----+
|2 |b    |
+--+-----+
|3 |a    |
+--+-----+
|3 |b    |
+--+-----+
|4 |a    |
+--+-----+
|4 |b    |
+--+-----+
|4 |c    |
+--+-----+

现在我尝试将“c” param 添加到没有c param的所有id

我怎么能在一个SQL查询中做到这一点? (我不会在示例参数中添加硬编码像“c”的参数,我不需要从任何其他表中获取它...)

2 个答案:

答案 0 :(得分:1)

您可以使用insert . . . select执行此操作。 select部分只需找到没有该参数的id

insert into t(id, param)
    select id, 'C'
    from t
    group by id
    having sum(case when param = 'C' then 1 else 0 end) = 0;

答案 1 :(得分:0)

如果没有匹配,您可以在MERGE ... SELECT插入时执行此操作。

MERGE INTO mytable t
  USING ( SELECT DISTINCT id, 'C'
            FROM mytable
        ) as i (key, val)
  ON id=key and param=val
  WHEN NOT MATCHED  THEN
    INSERT (id,param) VALUES (key,val)