1

2つのテーブルがあり、テーブルAの列のworlds列がテーブルBのwords列と一致し、テーブルBのidがテーブルAのidと一致bcntする値で列のテーブルbを更新します。acnt

create table a 
( 
    id number(9),
    words varchar2(2), 
    acnt number(9)
);

insert into a values(1,'Cairo',20);
insert into a values(1,'UK',10);
insert into a values(2,'KL',2);
insert into a values(2,'Cairo',2);
insert into a values(2,'London',30);
insert into a values(3,'Cairo',5);
insert into a values(4,'KSA',15);

create table b 
(
     id number(2), 
     words varchar2(20), 
     bcnt number
);

insert into b values(1,'Cairo',null);
insert into b values(1,'UK',null);
insert into b values(2,'KL',null);
insert into b  values(2,'Cairo',null);
insert into b values(3,'Cairo',null);
insert into b values(4,'KSA',null);

このSQLコードを使用しましたが、正しくありません。

update b 
set bcnt = (select acnt 
            from a 
            where a.id = b.id and a.words = b.words);

推測される結果:

1   cairo  20
1   uk     10
2    kl     2
2   cairo   5 
4   ksa     12

SQLは私に次のことを示しています

SQL> /

        ID WORDS                      BCNT
---------- -------------------- ----------
         1 Cairo
         1 UK                           10
         2 KL                            2
         2 Cairo
         3 Cairo
         4 KSA

6 rows selected.

SQL>

4

1 に答える 1

0

SQLがテーブル定義のword代わりに使用する問題はありますか?words

update b
    set bcnt=(select acnt from a where a.id=b.id and a.words=b.words );

また、2つのテーブルのデータ型が正しくありません。createtableステートメントは一貫している必要があります。

create table a (id number(9),words varchar2(20), acnt number);
create table b (id number(9), words varchar2(20), bcnt number);

何が起こっているのかというと、最初の表の2文字より長い値が2文字に切り捨てられているということです。したがって、「Cairo」の代わりに、値は「Ca」になります(varchar2(2)に収まるように)。その結果、結合に一致するものがありません。

于 2012-12-09T15:45:13.437 に答える