【问题标题】:Teradata Update Table from Select Statement来自 Select 语句的 Teradata 更新表
【发布时间】:2012-06-14 18:34:43
【问题描述】:

抱歉,如果标题不清楚。基本上我试图从多个表中选择某些记录,然后为返回的记录更新某个列值。

T-SQL 实现

    UPDATE 
        CUSTOMERS
    SET
        LIKES_US = 'Y'
    FROM
        RESTAURANT REST INNER JOIN CUSTOMERS CUST ON REST.LINK_ID = CUST.LINK_ID
        WHERE
        REST.REST_TYPE = 'Diner' AND CUST.LIKES_US IS NULL

甲骨文

    UPDATE 
       (SELECT CUST.LIKES_US
        FROM CUSTOMERS CUST INNER JOIN RESTAURANT REST ON CUST.LINK_ID=REST.LINK_ID
        WHERE REST.REST_TYPE = 'Diner' AND CUST.LIKES_US IS NULL) NEW_CUST
    SET
        NEW_CUST.LIKES_US = 'Y';

我尝试在 Teradata 中执行与在 Oracle 中相同的操作,但出现以下错误:

Executed as Single statement.  Failed [3707 : 42000] Syntax error, expected something like a name or a Unicode delimited identifier or an 'UDFCALLNAME' keyword between the 'UPDATE' keyword and '('. 
Elapsed time = 00:00:00.003 

STATEMENT 1: Unknown failed. 

我在网上寻找解决方案,但没有运气。

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    您是否尝试过使用 Teradata 的以下语法:

    UPDATE CUSTOMERS C1
      FROM (SELECT C2.LINK_ID
              FROM CUSTOMERS C2
             INNER JOIN RESTAURANTS R2
                ON C2.LINK_ID = R2.LINK_ID
            WHERE R2.REST_TYPE = 'DINER'
              AND C2.LIKES_US IS NULL) D1
       SET LIKES_US = 'Y'
     WHERE C1.LINK_ID = C2.LINK_ID
    

    【讨论】:

      【解决方案2】:

      我认为在这种特定情况下,下面的查询会执行得更好一些,因为它需要少一个连接。

      UPDATE C
      FROM CUSTOMERS  C, RESTAURANTS R
      SET LIKES_US = 'Y'
      WHERE 
      C.LINK_ID = R.LINK_ID
      AND R.REST_TYPE = 'DINER'
      AND C.LIKES_US IS NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多