我想编写一个SQL语句,该语句表示查找具有颜色X和亮度的用户,如果用户存在,则返回其所有行数据(Y.)。如果没有,则创建新行并传递其他信息。这两个单独的语句将执行如下操作:
Select (color, brightness, size, age) FROM mytable WHERE color = 'X' AND brightness= 'Y';
如果没有返回任何内容,则执行以下操作:
INSERT INTO mytable (color, brightness, size, age) VALUES (X, Y, big, old);
有没有办法将这些组合成一个查询??
最佳答案
在一个SQL DBMS中,select test insert方法是一个错误:没有什么可以阻止另一个进程在select
和insert
语句之间插入“丢失”行。请改为:
insert into mytable (color, brightness, size, age)
select color, brightness, size, age
from mytable
where not exists (
select 1 from
from mytable
where color = 'X' and brightness = 'Y'
);
SELECT (color, brightness, size, age)
FROM mytable
WHERE color = 'X' AND brightness= 'Y';
您应该能够将整个文本作为单个“查询”传递给DBMS。您可能需要考虑将它变成一个存储过程。
关于sql - 编写Postgres获取或创建SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16123944/