首页 > 解决方案 > 获取 sql 异常并想知道如何正确编写此查询?

问题描述

由于语法错误,我收到此查询的 SQL 异常,并且想知道如何编写此查询?

我在 Java 中使用 MySQL 5 和 spring 来使用这个查询。

SELECT
  MAX
  (
      nivpof_buystock.price*
      (
        SELECT
          no_of_shrs
        FROM nivpof_sellstock
        WHERE p_id=sellpid
          AND AUDIT_DATE_TIME=udate
      )
  )
  INTO acquisition_cost
FROM nivpof_buystock,nivpof_sellstock
WHERE nivpof_buystock.P_ID=sellpid
  ;
  IF
  (
      (
          (
            SELECT
              MAX(DATE)
            FROM nivpof_buystock
            WHERE (sc_code=company_code AND STATUS='Y' AND user_id=userid)
          )
          <'2018-01-31'
      )
      AND
      (
        SELECT
          DATEDIFF
          (
              (SELECT MAX(DATE) FROM nivpof_sellstock WHERE (sc_code=company_code AND STATUS='Y' AND user_id=userid)),
              (
                SELECT
                  MAX(DATE)
                FROM nivpof_buystock
                WHERE (sc_code=company_code AND STATUS='Y' AND user_id=userid)
              )
          )
          >365
      )
  )
  THEN
SELECT
  MAX
  (
    SELECT
      CLOSE_PRICE
    FROM niv_companystockdetails
    WHERE
      (
          sc_code=company_code
          AND DATE='2018-01-31'
      )
      *
      (
        SELECT
          no_of_shrs
        FROM nivpof_sellstock
        WHERE p_id=sellpid
          AND AUDIT_DATE_TIME=udate
      )
  )
  INTO acquisition_cost
FROM nivpof_buystock,nivpof_sellstock
WHERE nivpof_buystock.P_ID=sellpid
ENDIF;

例如buyprice=5,buydate=2017-01-24,selldate=2018-02-25,closeprice 2018-01-31=10。

所以在这里我想检查 (buydate<2018-01-24 AND selldate-buydate>365days AND closepriceof 2018-01-31>buyprice) 然后 buyprice=closepriceof 2018-01-31;

标签: mysql

解决方案


通常,java 一次运行一条 SQL 语句,而不是多条(批处理除外)。

如果您查看查询,您会尝试运行多个句子(您看到那里的那些;吗?),同时还尝试向其中添加一些插入逻辑(IF/ ENDIF)。

我建议您单独运行每个 SQL 语句。那应该可以解决问题。


推荐阅读