首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IF...<Sql query>....ELSE IF ....<Sql query>...Else

IF...<Sql query>....ELSE IF ....<Sql query>...Else
EN

Stack Overflow用户
提问于 2017-11-13 12:44:59
回答 2查看 155关注 0票数 0

我试图通过为Postgresql编写一个带有if条件的查询来使用NamedParameterJdbcTemplate中的查询。

我将向查询、存储和tot_store传递两个参数。我尝试了以下查询,但它不起作用。有什么建议吗?

代码语言:javascript
复制
IF (:store=1)
BEGIN 
    SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store asc;
END
ELSE IF (:store = 2)
BEGIN
    SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store asc;
END
ELSE
BEGIN
    SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store desc;
END

错误显示

代码语言:javascript
复制
syntax error at or near "IF"

提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2017-11-13 14:11:28

PostgreSQL不接受IF作为顶层语句。它也不是SQL标准的。

使用CASE ... WHEN ...

不过,PL/PgSQL代码块中允许使用IF;请参阅DOCREATE FUNCTION

在本例中,我将编写一条SQL语句并

代码语言:javascript
复制
ORDER BY
  CASE WHEN store IN (1,2) THEN -store
  ELSE store
  END DESC

(未测试)

票数 0
EN

Stack Overflow用户

发布于 2017-11-13 17:46:08

如果您使用的是Mysql,则代码中存在不正确的If语句。更正IF语法:

代码语言:javascript
复制
IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

你需要去掉括号,把THEN放在条件之后。

例如,您可以编写这样的存储过程:

代码语言:javascript
复制
DELIMITER //

CREATE FUNCTION SimpleCompare(n INT, m INT)
  RETURNS VARCHAR(20)

  BEGIN
    DECLARE s VARCHAR(20);

    IF n > m THEN SET s = '>';
    ELSEIF n = m THEN SET s = '=';
    ELSE SET s = '<';
    END IF;

    SET s = CONCAT(n, ' ', s, ' ', m);

    RETURN s;
  END //

DELIMITER ;

注意,在Mysql中有另一个IF。它是一个可以在select语句中使用的函数。

官方文档:https://dev.mysql.com/doc/refman/5.7/en/if.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47257208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档