5

作成する必要があるこのクエリに関連する 2 つのテーブルがあり、これら 2 つのテーブルを結合して更新する方法が正確にはわかりません。

ITEM および CONSUMER_ITEMS テーブルがあります。ITEM テーブルには、各アイテムの個別のコードと UPC コードがあります。文字列と ITEM.UPC_CODE を CONSUMER_ITEMS.NEW_ITEM_CODE に連結する必要があります。CONSUMER_ITEMS.ITEM_CODE = (ITEM.ITEM_CODES の特定のリスト)

CONSUMER_ITEMS.NEW_ITEM_CODE フィールドを更新するにはどうすればよいですか?

基本的には 'string' || と同じです。ITEM.UPC ですが、CONSUMER_ITEMS.ITEM_CODE を参照して、更新する ITEM_CODES のリスト内の特定の ITEM_CODE と等しくするにはどうすればよいですか。

4

4 に答える 4

9

あなたが望むように聞こえます:

UPDATE consumer_items ci
SET    new_item_code = (SELECT 'string' || item.upc_code
                        FROM   item
                        WHERE  item.item_code = ci.item_code
                       )
WHERE  ci.item_code IN ('a','b','c');

または、テーブル間に外部キー関係があり、consumer_items に主キーがあると仮定すると、これは機能するはずです。

UPDATE (SELECT ci.id, ci.new_item_code, item.upc_code
        FROM   consumer_items ci
               JOIN item ON item.item_code = ci.item_code
        WHERE  ci.item_code IN ('a','b','c')
       ) v
SET v.new_item_code = 'string' || v.upc_code

編集: WHERE 句を追加

于 2009-02-12T17:34:32.877 に答える
0

そうです、それは素晴らしいように見えますが、item.item_code = ci.item_code は次の理由で機能しません:

SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
     FROM t_r tr
     WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL

これは、CONSUMER_ITEMS の更新によく使用されるコードに関連付けられたコードと UPC の個別のリストです。

new_item_code = (SELECT 'string' || item.upc_code FROM item WHERE item.item_code = (SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
     FROM t_r tr
     WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL)); 

動作しないようです

于 2009-02-12T17:46:52.127 に答える
0

i.ITEM_CODE、i.UPC のリストは次のとおりです。

014940  070182132137
018266  929245021085
018268  729245021108
018418  029245022815
018419  129245022822
018420  229245022839
018421  529245022846
018422  929245022853

最初の列は商品コード、2 番目の列は UPC です。これは、ITEMS テーブルにあります。

CONSUMER_ITEMS テーブルには、基本的に CONSUMER_ITEMS.ITEM_CODE もあります。これが LINK ですが、CONSUMER_ITEMS.NEW_ITEM_CODE というフィールドもあります。NEW_ITEM_CODE に、上記のリストの対応する ITEM_CODE の UPC を「string」 || の連結で埋めます。上記のUPCコード。

そのリストを生成する方法は次のとおりです。

SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123434' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
(SELECT DISTINCT tr.item_code 
 FROM tr_table tr 
 WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL

これにより、上記の ITEM_CODE、UPC リストが生成されます。上記のコードに一致する CONSUMER_ITEMS を更新する必要があります。具体的には、NULL である NEW_ITEM_CODE フィールドを、STRING で連結された対応する UPC で更新する必要があります。

于 2009-02-12T18:10:31.103 に答える