我有两个表我希望更新列bcnt
中的表b,表A中的列acnt
中的值,其中表A中的worlds列与表B中的单词列匹配,并且id在表B中匹配表A中的id。
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>
答案 0 :(得分:0)
您的SQL使用word
代替words
的问题是否与表定义中一样?
update b
set bcnt=(select acnt from a where a.id=b.id and a.words=b.words );
此外,这两个表中的数据类型不正确。您的create table语句应该是一致的:
create table a (id number(9),words varchar2(20), acnt number);
create table b (id number(9), words varchar2(20), bcnt number);
发生的情况是第一个表中超过2个字符的值被截断为两个字符。因此,不是'开罗',而是'Ca'(适合varchar2(2))。因此,您在联接中没有匹配。