SQL Query正在使用NULL值进行更新

时间:2016-01-28 13:26:05

标签: sql oracle

我正在使用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字段中,我将每个空值都计为更新。

2 个答案:

答案 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;

来源:Oracle SQL: Update a table with data from another table