【问题标题】:Postgresql Syntax error at or near " THEN "“ THEN ”处或附近的 Postgresql 语法错误
【发布时间】:2016-02-16 09:00:42
【问题描述】:

我正在尝试在 Postgresql 中创建一个视图,但是当我运行此代码时出现此错误:

“THEN”或附近的语法错误

CREATE OR REPLACE VIEW VW_MONITOR_DEVICE AS
    SELECT
        P.POSIZIONE_DEVICE_ID AS MONITOR_DEVICE_ID,
        P.VALID AS VALID,
         [...]
        IF (VALID == FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID) AS DESCRIPTION,
         [...]
    FROM public.TA_POSIZIONI_DEVICE P
    JOIN ...

TA_POSIZIONI_DEVICE

  • 有效(布尔值不为空)

【问题讨论】:

  • case when VALID is FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID end
  • @jarlh 别忘了END :-)
  • @TimBiegeleisen,哎呀,谢谢!将编辑。
  • SQL 中没有IF,您在 Postgres SQL 参考中的哪个位置找到了?
  • @jarlh 谢谢!这个炒锅:) VALID 为 FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID end DESCRIPTION 的情况,

标签: sql postgresql syntax-error create-view


【解决方案1】:

你应该使用CASE

SQL CASE 表达式是一个通用的条件表达式,类似 if/else 其他编程语言中的语句

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

所以,

CREATE OR REPLACE VIEW VW_MONITOR_DEVICE AS
    SELECT
        P.POSIZIONE_DEVICE_ID AS MONITOR_DEVICE_ID,
        P.VALID AS VALID,
         [...]
           CASE WHEN VALID = false THEN 'Valid'
                ELSE P.REASON_FOR_INVALID
           END AS DESCRIPTION,

         [...]
    FROM public.TA_POSIZIONI_DEVICE P
    JOIN ...

【讨论】:

  • case 表达式返回一个值。 if/else 只是代码的条件执行 - 并且没有返回值(即类似于 case 语句。)
【解决方案2】:

你可以用例

case when VALID = FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID end DESCRIPTION,

【讨论】:

  • 但他在标签中提到了 postgresql
【解决方案3】:

IF (VALID == FALSE) THEN 'Valid' ELSE P.REASON_FOR_INVALID END IF AS DESCRIPTION

试试这个!你的情况有括号问题

【讨论】:

猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 2016-11-22
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多