【问题标题】:Getting error Incorrect syntax near the keyword 'as'. when convert mysql query to sql关键字“as”附近出现错误语法错误。将mysql查询转换为sql时
【发布时间】:2018-07-17 19:43:27
【问题描述】:

我正在将 mysql 转换为 sql 查询,我为在 sql server 中运行查询做了很多更改,但我仍然收到错误Incorrect syntax near the keyword 'as'.,谁能帮助我为什么会收到此错误?这是我的查询

UPDATE tb_EpVisitRange as v 
left JOIN tb_Episode as e 
  ON v.BranchID   = e.BranchID 
 AND v.company_id = e.CustID 
 AND v.CMW        = e.CMW
SET
e.EpVisitCount = IIF(PayerType = 'NonEp', 0, IIF(LUPA = 1, 0, v.High)),
e.VisitAlert = IIF(Status = 'Closed', 0, IIF((IIF(PayerType = 'NonEp', 0, IIF(LUPA = 1, 0, v.High))) > 0, 1, 0))
where  billed_flag = '0';

【问题讨论】:

  • 您正在尝试更新此处联接左侧的表。如果找不到记录,您希望做什么......?
  • 这实际上适用于MySql?如果是这样,这是不使用 MySql 的另一个原因。我越了解它,我就越不喜欢它。
  • 更新在 v 但集合在 e。它还有其他问题。更新左连接在这里变得零意义。如果记录不存在,则无需更新。
  • previous post 完全相同的问题

标签: sql sql-server tsql join sql-update


【解决方案1】:

SQL Server 中的正确语法是:

UPDATE e
    SET EpVisitCount = (CASE WHEN PayerType = 'NonEp' THEN 0
                             WHEN LUPA = 1 THEN 0
                             ELSE v.High
                        END),
        VisitAlert = (CASE WHEN Status = 'Closed' THEN 0
                           WHEN PayerType = 'NonEp' THEN 0
                           WHEN LUPA = 1 THEN 0
                           WHEN v.High > 0 THEN 1
                           ELSE 0
                      END)
    FROM tb_EpVisitRange v JOIN
         tb_Episode e
         ON v.BranchID = e.BranchID AND v.company_id = e.CustID AND v.CMW = e.CMW
    WHERE billed_flag = 0;

注意事项:

  • 如果要使用数据库,请了解正确的 SQL Server 语法。
  • 使用CASE;它是正确的 SQL,适用于所有正确的数据库。如果您有多个条件,则尤其如此。
  • 如果您要更新e,那么您需要INNER JOIN 或将e 设为LEFT JOIN 中的第一个表。更新不匹配的行没有意义。
  • billed_flag 大概是一个数字,所以不要在比较值周围使用引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2015-03-07
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多