【问题标题】:Conditional INSERT or SELECT like in a CASE statementCASE 语句中的条件 INSERT 或 SELECT
【发布时间】:2014-06-14 05:06:54
【问题描述】:

我想在 PostgreSQL 中使用 CASE 语句进行插入。

如果我的结果集计数为零,我正在尝试插入。如果它不等于 0,那么我只想选择该表上的最大时间。

select
    case
        when (select count(*) from x where TableName = 'p' ) > 0
              then
             (select    MaxDataDate from    x where TableName = 'p' ) 
        when (select count(*) from s where TableName = 'p') = 0
              then
             (insert into x values('p','1900-01-01'))
end

【问题讨论】:

  • 请分享一些示例数据,您到底想做什么?
  • 你用的是什么数据库引擎,请打个tag,会有帮助的
  • 您不能编写选择或插入测试是否验证的查询。您必须测试您的条件,然后执行相关查询。
  • 那我该怎么做呢?
  • 在那里你应该找到你需要的答案:stackoverflow.com/questions/11299037/postgresql-if-statement

标签: sql postgresql


【解决方案1】:

可以像这样使用data-modyfying CTE 转换为纯 SQL:

WITH sel AS (SELECT maxdatadate FROM x where tablename = 'p')
,    ins AS (
    INSERT INTO x (?column_name1?, ?column_name2?)
    SELECT 'p'::?type1?, '1900-01-01'::?type2?
    WHERE  NOT EXISTS (SELECT 1 FROM ins)
    AND    EXISTS (SELECT 1 FROM s WHERE tablename = 'p')
    )
SELECT * FROM ins;

填写缺失的信息。 ? 标记点。

假设x.tablename 是唯一的。否则,您的第二个 SELECT 声明将是无稽之谈。

替代方案是 plpgsql 函数或 DO 语句 like @X.L.Ant already hinted in his comment. 中的程序解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多