我想编写一个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方法是一个错误:没有什么可以阻止另一个进程在selectinsert语句之间插入“丢失”行。请改为:

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/

10-12 03:26
查看更多