【问题标题】:SAS PROC SQL update with inner join使用内部联接更新 SAS PROC SQL
【发布时间】:2016-05-25 16:18:54
【问题描述】:

上次我检查时,这是完全合法的 SQL 代码,甚至 Access 也可以处理。不知道为什么我从 SAS 收到以下错误

UPDATE fu_coding 
INNER JOIN old_form16 
    ON fu_coding.CSPCCID = old_form16.CSPCCID 
SET fu_coding.CHANGED = 1
WHERE fu_coding.NEW_DIAG <> old_form16.NEW_DIAG;

错误是:

18311      INNER JOIN old_form16
           -----
       22
       76
ERROR 22-322: Syntax error, expecting one of the following: a name, (, '.', AS, SET.
ERROR 76-322: Syntax error, statement will be ignored.

非常感谢您在这方面的帮助!

【问题讨论】:

标签: sql sas proc-sql


【解决方案1】:

我认为proc sql 不支持使用内部连接进行更新。你可以这样做:

UPDATE fu_coding 
    SET CHANGED = (SELECT 1
                   FROM old_form16
                   WHERE fu_coding.CSPCCID = old_form16.CSPCCID AND
                         fu_coding.NEW_DIAG <> old_form16.NEW_DIAG
                  )
    WHERE EXISTS (SELECT 1
                   FROM old_form16
                   WHERE fu_coding.CSPCCID = old_form16.CSPCCID AND
                         fu_coding.NEW_DIAG <> old_form16.NEW_DIAG
                  ) ;

使用数据步骤,代码可能会更简单。

【讨论】:

  • 我遇到了语法错误。 SAS 强调了 fu_coding 和 CHANGED 之间的时间段。它说它期待一个“=”
  • @blacksaibot 。 . .那里不需要那个表别名。
【解决方案2】:

SAS 不支持在 SQL 过程中使用内部联接进行更新。要么重写(根据@Gordon 的建议),或者尽可能使用pass through

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 2014-06-09
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2012-12-30
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多