我以前只写一些简单的updaet报表,如更新设置表C1 = 'xxx ',等等

今天遇到一个数据校正问题。该项目的背景如下。有一个表A。有两个字段A1、A2和一个关联表B。还有两个字段,B1和B2。A2和B2相关联,希望将字段A1更新为B中的B1。

在理论上,SQL应该写得很好,但据报道半天ORALCE语法错误。还有一些小细节没有注意到。

第一次测试数据

表1,zz_test1





表2,zz_test2





要更新的表1文字表两text1值,相应的SQL如下:


更新zz_test1 T1 T1。文本=(
选择T2。正文从zz_test2 T2,T2。PID= t1。id
)
在存在
(
选择1 zz_test2 T2,T2。PID= t1。id
)



以下条件仅代表一个限制,它只更新符合条件的数据,也可以编写。


更新zz_test1 T1 T1。文本=(
选择T2。正文从zz_test2 T2,T2。PID= t1。id
)
在T1。身份在(选择PID从zz_test2)




此外,还有一种合并编写方法,相应的sql如下所示:


合并使用zz_test2 zz_test1 T1 T2(T1。id= T2。PID

当匹配时

更新集t1。文本= T2。,



为了避免与t1中的数据相对应的T2中的多个数据,可以将SQL更改为以下方式:


合并成zz_test1 T1的使用
(
SELECT * FROM zz_test2 X,X = rowid
(选择最大(y.rowid)从zz_test2 y在x = y身份证身份证)
)
T2
在(t1)。id= T2。PID
当匹配时
更新集t1。文本= T2。,



还有一个来自语法的更新,它不适合在Oracle和MySQL中进行测试。



作为总结,需要将项目更新为一个表的字段到另一个表中的某个字段。您可以使用更新语法并进行限制。使用合并的语法,还有一个合并语法,而从Oracle和MySQL中不能使用更新。