5

ソース テーブルから一時テーブルを更新しようとしています。

    UPDATE #DETAIL
        SET EXCD_ID, CDOR_OR_AMT, CDOR_OR_VALUE
        (SELECT 
            CDID_ADDL_DATA_1, CDID_ADDL_DATA, CDID_VALUE_STRING
        FROM
            CMC_CDID_DATA CDID
        WHERE
            CDID.CLCL_ID = DTL.CLCL_ID AND
            CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO AND
            CDID_TYPE = 'NDC'
    )
    FROM #DETAIL DTL
    WHERE DTL.CDOR_OR_ID = 'XS'

残念ながらそれは不平を言う

Incorrect syntax near ',' (on the '(SELECT' line)
Incorrect syntax near 'FROM' (the second one)
4

3 に答える 3

4

多くの試行錯誤の後、私は職場でいくつかの助けを集め、これを思いつきました:

    UPDATE #DETAIL
        SET DTL.EXCD_ID = CDID.CDID_ADDL_DATA_1,
            DTL.CDOR_OR_AMT = CONVERT(MONEY,CDID.CDID_ADDL_DATA),
            DTL.CDOR_OR_VALUE = CDID.CDID_VALUE_STRING
    FROM #DETAIL DTL
    INNER JOIN 
            CMC_CDID_DATA  CDID ON
            CDID.CLCL_ID = DTL.CLCL_ID AND
            CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO 
    WHERE DTL.CDOR_OR_ID = 'XS'
          AND CDID.CDID_TYPE = 'NDC'

どのsybaseが受け入れているようです。

于 2012-05-04T18:10:05.363 に答える
3

次のように更新する必要があります。

UPDATE #DETAIL
SET DTL.EXCD_ID = CDID.CDID_ADDL_DATA_1,
    DTL.CDOR_OR_AMT = CDID.CDID_ADDL_DATA
    DTL.CDOR_OR_VALUE = CDID.CDID_VALUE_STRING
FROM #DETAIL DTL
INNER JOIN (SELECT 
            CDID_ADDL_DATA_1, CDID_ADDL_DATA, CDID_VALUE_STRING
        FROM
            CMC_CDID_DATA ) CDID ON CDID.CLCL_ID = DTL.CLCL_ID AND
            CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO AND
            CDID_TYPE = 'NDC'
WHERE DTL.CDOR_OR_ID = 'XS'

詳細については、この記事を確認してください。

于 2012-05-04T09:08:39.203 に答える
0

これを試してみたところ、うまくいきました(Oracleで)

update dstTable T
    set (T.field1, T.field2, T.field3) = 
           (select S.value1, S.value2, S.value3
            from srcTable S
             where S.key = T.Key);

残念ながら、これは Oracle 固有の構文です。

警告: 上記の更新には where 句がないことに注意してください。テーブル全体を更新します。サブクエリが行を返さない場合、ターゲット フィールドは NULL に設定されます。また、サブクエリが複数の行を返す場合もエラーです。

于 2022-02-10T01:27:54.570 に答える