我正在使用Oracle,我正在尝试使用另一个表(B)中的数据更新表(A)。并非B中的每个字段都有一个值,因此我有许多NULL条目。当我运行更新时,它说6000行已更新。现在表B中有6000行,但是对于这个查询,只有14行有数据。当我从两个表中为这个值选择count(*)时,它们都返回14行。为什么报告6000行已更新?
UPDATE
table1 A
SET
phone_work = (
SELECT B.phone_work
FROM table2 B
WHERE B.id = A.applicant_id)
WHERE EXISTS (
SELECT 1
FROM table2 B
WHERE B.id = A.applicant_id);
我也尝试了以下内容,得到了相同的结果:
UPDATE
table1 A
SET
phone_work = (
SELECT B.phone_work
FROM table2 B
WHERE B.id = A.applicant_id
AND B.phone_work is not null
)
WHERE EXISTS (
SELECT 1
FROM table2 B
WHERE B.id = A.applicant_id);
为什么要报告6000行的更新?当我更改字段但使用相同的语法时,它报告更新我期望的确切行数,例如表B的计数在NAME字段中有86个条目,它报告更新了86行。似乎在phone_work字段中,我将每个空值都计为更新。
答案 0 :(得分:1)
也许您想检查exists
中的非NULL值:
UPDATE table1 A
SET phone_work = (SELECT B.phone_work
FROM table2 B
WHERE B.id = A.applicant_id
)
WHERE EXISTS (SELECT 1
FROM table2 B
WHERE B.id = A.applicant_id AND B.phone_work IS NOT NULL
);
答案 1 :(得分:0)
试试这个:
UPDATE
(
SELECT A.phone_work Aphone, B.phone_work Bphone
FROM table2 B, table1 A
WHERE B.id = A.applicant_id AND B.phone_work IS NOT NULL
)
SET
Aphone = Bphone;