矢志 2015-10-23 07:02 采纳率: 0%
浏览 1600

求大神看看SQL哪里有问题

UPDATE
ent_emodel_energy_data_quarter,
(SELECT
EMODEL_ENERGY_DATA_ID,
ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID AS EMODEL_ENERGY_ID,
DATA_TIME,
(SELECT
SUM(VALUE)
FROM
ent_emodel_energy_data_month
WHERE (
DATA_TIME = ent_emodel_energy_data_quarter.DATA_TIME
OR ent_emodel_energy_data_quarter.DATA_TIME BETWEEN '2015-08-01 00:00:00'
AND '2015-08-31 23:59:59'
OR ent_emodel_energy_data_quarter.DATA_TIME BETWEEN '2015-09-01 00:00:00'
AND '2015-09-30 23:59:59'
AND EMODEL_ENERGY_ID = ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID
)) AS VALUE
FROM
ent_emodel_energy_data_quarter
INNER JOIN ent_emodel_energy
ON ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID = ent_emodel_energy.EMODEL_ENERGY_ID
WHERE DATA_TIME = '2015-07-01'
AND IS_MANUAL_INPUT = 1
AND PERIOD_ID <= 8
AND IS_ENABLE = 1) AS changedata
SET
ent_emodel_energy_data_quarter.VALUE = changedata.VALUE
WHERE ent_emodel_energy_data_quarter.EMODEL_ENERGY_DATA_ID = changedata.EMODEL_ENERGY_DATA_ID

MySql为什么可以跑起来,SqlServer直接挂掉了。。。报错[Err] 42000 - [SQL Server]“,”附近有语法错误。
42000 - [SQL Server]关键字 'AS' 附近有语法错误。

  • 写回答

2条回答

  • 54powerman 2015-10-23 07:35
    关注

    格式化一下先:

    UPDATE
      ent_emodel_energy_data_quarter,
      (
        SELECT
          EMODEL_ENERGY_DATA_ID,
          ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID AS EMODEL_ENERGY_ID,
          DATA_TIME,
          (
            SELECT
              SUM(VALUE)
            FROM
              ent_emodel_energy_data_month
            WHERE
              (
                DATA_TIME = ent_emodel_energy_data_quarter.DATA_TIME
              OR ent_emodel_energy_data_quarter.DATA_TIME BETWEEN
                '2015-08-01 00:00:00' AND '2015-08-31 23:59:59'
              OR ent_emodel_energy_data_quarter.DATA_TIME BETWEEN
                '2015-09-01 00:00:00' AND '2015-09-30 23:59:59'
              AND EMODEL_ENERGY_ID =
                ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID
              )
          ) AS VALUE
        FROM
          ent_emodel_energy_data_quarter
        INNER JOIN ent_emodel_energy
        ON
          ent_emodel_energy_data_quarter.EMODEL_ENERGY_ID =
          ent_emodel_energy.EMODEL_ENERGY_ID
        WHERE
          DATA_TIME         = '2015-07-01'
        AND IS_MANUAL_INPUT = 1
        AND PERIOD_ID      <= 8
        AND IS_ENABLE       = 1
      ) AS changedata
    SET
      ent_emodel_energy_data_quarter.VALUE = changedata.VALUE
    WHERE
      ent_emodel_energy_data_quarter.EMODEL_ENERGY_DATA_ID =
      changedata.EMODEL_ENERGY_DATA_ID
    

    类似SQL在mysql里确实可以使用。
    但在mssql和oracle,恐怕都不行。

    MS SQL Server的语法:
    update t1 set t1.tValue = t2.tValue
    from t1
    inner join t2 on t1.id = t2.id
    例子:
    update area
    set area_phone_code = z.code
    from area
    inner join test.zipcode z
    on z.areaid = a.area_code

    而oracle中可以这么写:
    UPDATE 表2
    SET
    表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A)
    WHERE
    EXISTS ( SELECT 1 FROM 表1 WHERE 表1.A = 表2.A)

    根据不同的数据库你需要重新写sql,不要期望一个复杂sql多库通用,除非,你把他们拆成多个简单查询,在一个事务里运行才有可能。

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料