我真的很想得到这个帮助。我有两个表让我们说t1和t2。我想根据从t2获得的值更新t1。 t1和t2之间有公共字段,即t1.username = t2.emaiAddress。有没有办法更新t1.username?
下面是t1和t2结构
create table t1
(
username varchar2 (50) primary key,
password varchar2 (50) not null
);
create table t2
(
ID varchar2 (50) primary key,
emailAddress varchar2 (50) not null
);
我没有引用t1,因为这是一个例子,我可以应用于各种事情。我试过的是
UPDATE (SELECT t1.username,
t1.emailAddress
FROM t1 join t2 on t1.username = t2.EMAILADDRESS
WHERE t2.id = 'SCM-026020')
SET t1.username = 'john@gmail.com';
答案 0 :(得分:1)
这通常使用Oracle中的子查询来完成:
UPDATE t1
SET username = 'john@gmail.com'
WHERE EXISTS (SELECT 1
FROM t2
WHERE t1.username = t2.EMAILADDRESS AND t2.id = 'SCM-026020'
);
答案 1 :(得分:0)
你有3种方法可以做到这一点。
首先是手动。您将需要进行2次查询,因为更新一次会破坏关联。
如果您不想手动执行多个查询,可以使用第二个,包括在t1.username和t2.emaiAddress之间实现foreing key约束,并使用"级联更新"旗。这样,更改主服务器将自动更新从服务器(主服务器将是实现约束的服务器)。但是,更新从站将引发错误。
第三种方法是在更新之前创建一个触发器""它将更新另一个表。它是一本"手册"做第二种选择的方法。
答案 2 :(得分:0)
我们在表t1中假设有一个记录,其中用户名=' mary@gmail.com'。并且您需要使用t2中的电子邮件地址更新此用户名,其中ID =' SCM-026020'。
尝试以下查询。
UPDATE t1
SET t1.username = (SELECT emailAddress
FROM t2
WHERE ID = 'SCM-026020')
WHERE t1.username = 'mary@gmail.com'
这将更新' mary@gmail.com'到' john@gmail.com'在表t1中。希望这是你想要的。