Mysql 基于ID更新表中的列并一次更新单个行

Mysql 基于ID更新表中的列并一次更新单个行,mysql,sql,sql-server-2008,oracle11g,Mysql,Sql,Sql Server 2008,Oracle11g,我有两个表table1和table2,结构如下。我需要用表2中的值更新表1中的一列 Table1: ID , Txt1 , Txt2 ID是ID,Txt 1和Txt 2是varchr Table 2 TableId, Id_in_table1 , ValueType , Value TableId是数据有效的表的Id。所以在本例中,tableId将包含Table1的表id。这些表的ID存储在另一个表中。我们基本上也需要根据这个tableId过滤数据,因为我们需要确保我们没有复制对这个表无效的

我有两个表table1和table2,结构如下。我需要用表2中的值更新表1中的一列

Table1:
ID , Txt1 , Txt2
ID是ID,Txt 1和Txt 2是varchr

Table 2
TableId, Id_in_table1 , ValueType , Value
TableId是数据有效的表的Id。所以在本例中,tableId将包含Table1的表id。这些表的ID存储在另一个表中。我们基本上也需要根据这个tableId过滤数据,因为我们需要确保我们没有复制对这个表无效的数据

现在我需要做的是,根据以下逻辑从表2中更新表1的Txt1和Txt2

表2中的TableId应与“表1”的TableId匹配 对于表1的每个Id,其等于表2的“Id_in_table1”, 根据table2.ValueType,将table1.value中的数据放入Txt1或Txt2。 如果ValueType等于“Type1”,则更新table1.txt1=table2.value 否则,如果ValueType等于“Type2”,则更新table2.txt2=table2.value

可能还有其他值类型,但在这种情况下我们不需要做任何事情

我编写的SQL查询如下:

update 
table1 
set 
table1.txt1 = (select value from table1 c join table2 f ON c.ID = f.Id_in_table1 and f.ValueType ='Type1')
我想在两个不同的查询中更新txt1和txt2

但是这个查询将用相同的值更新表1中的所有行。我需要的逻辑是,它应该只添加到那些ID在表2中的行

当select语句从联接返回两行时,也就是说,如果table2中存在两个table1.Id,该查询也会失败

有谁能帮我解答这个场景的问题吗

PS:我需要编写一个通用查询,而不是任何特定于db的查询


TIA

您是否考虑过
更新加入

UPDATE table1 t1
  JOIN table2 t2
    ON t2.id_in_table1 = t1.id
   SET t1.txt1 = CASE WHEN t2.valuetype = 'Type1' THEN t2.value ELSE t1.txt1 END,
       t1.txt2 = CASE WHEN t2.valuetype = 'Type2' THEN t2.value ELSE t1.txt2 END
如果需要将其限制在
JOIN
之外,请添加
WHERE
子句


这是MySQL的正确语法,但是您可能需要做一些不干净的事情才能在多个DB语言中工作。

对于
Type1
可以使用如下方法

update c
set c.txt1 = f.value
from table1 c
inner join table2 f
on c.ID = f.Id_in_table1
and f.ValueType ='Type1'
update c
set c.txt2 = f.value
from table1 c
inner join table2 f
on c.ID = f.Id_in_table1
and f.ValueType ='Type2'
对于
Type2
可以使用如下

update c
set c.txt1 = f.value
from table1 c
inner join table2 f
on c.ID = f.Id_in_table1
and f.ValueType ='Type1'
update c
set c.txt2 = f.value
from table1 c
inner join table2 f
on c.ID = f.Id_in_table1
and f.ValueType ='Type2'

这是什么数据库?所有的还是一个特定的?我需要一个可以在任何数据库上运行的查询这将在每次查询执行中更新所有具有相同值的行。我的意思是,没有任何检查表明只更新当前行,您希望避免逐行处理。这是将数据视为集合,因此,当表2中的行具有相同的ID且只有c.txt1的值时,才会更新表1中的行。当且仅当表2的valuetype为“Type1”时,它使用集合处理而不是行处理,这在任何关系数据库中都更有效