我在postgres db中有以下表格:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
system_id VARCHAR(64) UNIQUE,
license_serials INTEGER[],
name VARCHAR(256));
我有license_serial,我知道表中没有客户在license_serials数组中有该序列。在这种情况下,我通过其他方式获取system_id,然后需要:
或
我能够通过一系列查询和IF语句来完成此操作,但我想知道是否有一种有效的方法可以使用子查询或其他方式执行此操作?我一般都对SQL不熟悉,并且无法正确理解语法。
这是我到目前为止所做的...虽然它并没有真正起作用,但是如果客户(使用那个system_id)已经存在,我还没有想出如何附加到数组表
CREATE OR REPLACE FUNCTION get_or_insert_customer
( p_system_id customers.system_id%TYPE
, p_name customers.name%TYPE
, p_serial INTEGER
) RETURNS customers.id%TYPE AS $func$
LOCK TABLE {1} IN EXCLUSIVE MODE;
INSERT INTO {1}(system_id, name, license_serials)
SELECT p_system_id,p_name,ARRAY[p_serial]
WHERE NOT EXISTS (SELECT 1 FROM customers WHERE system_id = p_system_id)
;
SELECT id
FROM customers WHERE system_id = p_system_id
;
非常感谢您的阅读!