2016-11-04 5 views
0
TESTDTA is the test database. 
F41= First table 
F42=Second table 

データF41テーブルからF42テーブルから更新ロー '値 'Y'、別のテーブルからのレコードをマッチングさせるための「B」

FLAG STORE NAME NUMBER 
S   1  A  A1 
S   2  B  B2 
S   3  C  C3 

データ

STORE NAME NUMBER 
1  A  A1 
2  B  B2 
3  C  C3 
4  D  D4 

テーブル "F42"に一致するレコードがある場合は、テーブル "F41"のカラム "FLAG"の値を "P"に更新する必要があります。

私は試しました低いSQL。しかし、それは構文エラーがあります。

UPDATE TESTDATA.F41,TESTDATA.F42 SET F41.FLAG='P' 
WHERE F41.NAME=F42.NAME AND F41.NUMBER=F42.NUMBER 

誰でもこのSQLを書くのを手伝ってもらえますか?あなたの助け

+1

が本当に必要なSQLのバージョンに依存し、それがどのようなデータベースを稼動していますか?また、両方のテーブルでストアを一致させる必要がありますか? – Beth

答えて

0

を事前に

おかげで、おそらく少しクリーナー

UPDATE F41 SET FLAG='P' 
FROM F41 A 
JOIN F42 B on A.NAME=B.NAME AND A.NUMBER=B.NUMBER 
0

あなたのDBMSは、あなたが、これは答えるかもしれないF41マッチF42にすべての列の値を意味し、「レコードの一致」して、Oracleで、もしあれば問題:

DDL:

create tabLe F41 
(
    FLAG  varchar2(10) 
    ,STORE_x  number 
    ,NAME_x  varchar2(10) 
    ,NUMBER_x  varchar2(10) 
); 

create tabLe F42 
(
    STORE_x  number 
    ,NAME_x  varchar2(10) 
    ,NUMBER_x  varchar2(10) 
); 

注:に_xを追加しました列STORE、NAME、NUMBERは、DBMSの予約語であるためです。

DMLは:

insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 1, 'A', 'A1'); 
insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 2, 'B', 'B2'); 
insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 3, 'C', 'C3'); 

insert into F42 (STORE_x, NAME_x, NUMBER_x) values (1, 'A', 'A1'); 
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (2, 'B', 'B2'); 
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (3, 'C', 'C3'); 
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (4, 'D', 'D4'); 

UPDATE文の使用存在します。このことができます

update F41 t1 
set  flag = 'P' 
WHERE EXISTS (SELECT 1 
       FROM F42 t2 
       WHERE t2.STORE_X = t1.STORE_X 
       AND  t2.NAME_X = t1.NAME_X 
       AND  t2.NUMBER_X = t1.NUMBER_X);  

願っています!

0

あなたはWHERE句よりも派手な何でこれを行うことができます。

UPDATE TESTDATA.F41 
    SET FLAG = 'P' 
    WHERE EXISTS (SELECT 1 
        FROM TESTDATE.F42 
        WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER 
       ); 

これは、標準SQLであり、任意のデータベースで動作するはずです。

+0

このSQLはうまくいきました.Gordonを助けてくれてありがとう... Kudos Gordon –

0
UPDATE TESTDATA.F41 SET F41.FLAG='P' 
FROM TESTDATA.F42 
WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER 
0
UPDATE TESTDATA.F41 
SET FLAG = 'P' 
WHERE EXISTS (SELECT 1 
       FROM TESTDATE.F42 
       WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER 
      ); 
関連する問題