如何填写列值

时间:2018-05-02 14:23:39

标签: sql postgresql

用于完成表的SQL脚本

您好, 我有以下挑战:

  • 两个表:table1和table2
  • table1对table2有一个查找列(例如'referencecolumn')。 table1中的每条记录必须指向table2中的一条记录。 table1中的许多记录可能指向table2中的相同记录

不幸的是,table1中有许多datarecods,它们对table1.referencecolumn有'错误'的值。值为NULL或0,我需要用正确的值填充它们。 幸运的是,它们是table1到table2中的许多其他“冗余”指针列。但它们只能产生对table2记录的可接受引用。

例如,学生考试记录(表1)可能只通过列table1.examregulation

指向一个考试规则(表2)

所以我认为我必须执行以下操作(SQL或python),但我是SQL和python的新手:

FOREACH table1record where table1.referencecolumn is NULL or 0

IF 
((table1.column1 == table2.column1) AND (table1.column2 == table2.column2) AND
AND (table1.column3 == table2.column3) )
THEN SET table1.referencecolumn = table2.referencedcolumn
ENDIF

END FOREACH

@a_horse_with_no_name:谢谢! '我不清楚你是想永久更新数据还是只是改变结果' - 我想更新/填充table1中的数据一次。

表1

+------+------+------+-----------------+
| col1 | col2 | col3 | referencecolumn |
+------+------+------+-----------------+
| ABB  | 2000 | 52   | NULL            |
| AKB  | 2001 | 61   | 0               |
| INB  | 1998 | 77   | 0               |
| ENM  | 2010 | 56   | NULL            |
+------+------+------+-----------------+
table2
+------+------+------+------------------+
| col1 | col2 | col3 | referencedcolumn |
+------+------+------+------------------+
| ABB  | 2000 | 52   | 254              |
| AKB  | 2001 | 61   | 587              |
| INB  | 1998 | 77   | 665              |
| ENM  | 2010 | 56   | 322              |
+------+------+------+------------------+

RESULT after SQL UPDATE or run script: table1 looks like this:


+------+------+------+-----------------+
| col1 | col2 | col3 | referencecolumn |
+------+------+------+-----------------+
| ABB  | 2000 | 52   | 254            |
| AKB  | 2001 | 61   | 587            |
| INB  | 1998 | 77   | 665            |
| ENM  | 2010 | 56   | 322            |
+------+------+------+-----------------+

1 个答案:

答案 0 :(得分:1)

您的更新声明应为。

UPDATE Table1 t
  SET referencecolumn = s.referencedcolumn
FROM Table2 s
WHERE t.col1 = s.col1
    AND t.col2 = s.col2
    AND t.col3 = s.col3;