web-dev-qa-db-ja.com

フェッチされた最初の行を選択するdb2クエリ

私のようなクエリがあります

UPDATE PRD_PRODUCT_L10N ppl
 SET ( CATCHING_PHRASE
    , GENERIC_NAME
    , INGREDIENTS
    , QUANTITY
    , DOSE
    , NUTRITION_FACTS
    , PRODUCT_DESCRIPTION
    , PROMOTION_MESSAGE
    , MESSAGE
   ) = (
   SELECT distinct CATCHING_PHRASE
        , GENERIC_NAME
        , INGREDIENTS
        , QUANTITY
        , DOSE
        , NUTRITION_FACTS
        , PRODUCT_DESCRIPTION
        , PROMOTION_MESSAGE
        , MESSAGE
    FROM  TEMP_UPLOAD_PRODUCT_ATTRIBUTES tupa
    INNER JOIN
          PRD_PRODUCT                    pp
      ON  pp .EISIDENTIFIER = tupa.EISIDENTIFIER
    WHERE ppl.PRODUCTGUID   = pp.GUID
      AND ppl.LOCALEGUID     = tupa.LOCALEGUID
   )
 WHERE EXISTS (
   SELECT 0
    FROM  TEMP_UPLOAD_PRODUCT_ATTRIBUTES tupa
    INNER JOIN
          PRD_PRODUCT                    pp
      ON  pp .EISIDENTIFIER = tupa.EISIDENTIFIER
    WHERE ppl.PRODUCTGUID   = pp  .GUID
      AND ppl.LOCALEGUID     = tupa.LOCALEGUID
   )     

サブクエリが複数の行を返すため、最初に選択された行を挿入したいと思います。 DB2データベースでそれを行うにはどうすればよいですか?

アドバイスをお願いします。

ありがとう

10
beetri

DB2バージョンに応じて(8以上と思います)、サブクエリでフェッチを使用できます

(テーブルフェッチから選択*最初の1行のみをフェッチ)

http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.admin%2Ffrstnrw.htm

20
Tadeu Maia

追加 - FETCH FIRST ROW ONLY をサブクエリに追加します。検索する fetch-first-clauseリンク先のページで詳細をご覧ください。これは、Linux/Unix/Windows上のDB2用です。

メインフレーム(v9)を使用している場合、詳細は このページ (または バージョン1 )が必要です。

3
bhamby