如果元素不存在,则为array_append

时间:2012-12-22 17:08:24

标签: sql arrays postgresql

  

可能重复:
  convert MySQL SET data type to Postgres

我有postgresql 8.4。

我正在尝试建立查询但没有成功。如果元素在对齐行中不存在,我想将元素插入到数组中。

表“测试”:

+------------------+------------------+
| id               | varchar(20)      |
| timestp          | timestamp        |
| place            | varchar(20)      |
| myarray[][]      | varchar[14][254] |
+------------------+------------------+

+---------+---------------------+-----------+----------------+
|  xyz    | 2010-01-01 10:10:10 | nowhere   |  "{abc,qwert}" |
+---------+---------------------+-----------+----------------+

所以我想在myarray WHERE中添加“{fgh,gfdsa}”(id ='xyz'AND timestp =“2010-01-01 10:10:10”AND place ='nowhere')如果它还没有在myarray中

我试过这样的事情>

UPDATE test
SET myarray = array_append(wascon2,'{fgh,gfdsa}') 
WHERE (id='xyz' AND timestp="2010-01-01 10:10:10" AND place='nowhere'
AND NOT EXISTS 1 FROM test WHERE (myarray='{fgh,gfdsa}')));

这不起作用,每当我调用它时它都会附加数组。

+---+---------------------------+-------------------------------------------+
|xyz|2010-01-01 10:10:10|nowhere|{"{abc,qwert}","{fgh,gfdsa}","{fgh,gfdsa}"}|
+---+---------------------------+-------------------------------------------+

如果认为我应该使用>

myarray = ANY ('{fgh,gfds}'::varchar[]) 

不知怎的但我无法知道如何......

最好的问题是对我来说是一个plpgsql函数。

1 个答案:

答案 0 :(得分:2)

UPDATE test
    SET myarray = myarray || array['fgh','gfdsa']::varchar[][]
    WHERE
        id = 'xyz'
        AND timestp = '2010-01-01 10:10:10'
        AND place = 'nowhere'
        AND not(myarray @> array['fgh','gfdsa']::varchar[][])
    ;