繁体   English   中英

如果另一个表具有匹配的字段值,如何更新数据库表的1个字段或2个字段?

[英]How do i update 1 field or 2 of a database table if another table has matching field values?

假设我有一个包含这些列和值的表:

id    field
-----------
1     0001
2     0002
3     0003
4     0004
5     0005

然后我有另一个表与这些字段和值:

id    tid    info_1    field_1    info_2    field_2
---------------------------------------------------
1     1      7         0000       null      null
2     2      null      null       10        0002
3     3      17        0003       null      null
4     4      29        1111       null      null
5     6      null      null       44        0005

我需要一个更新查询,该查询将更新表2的记录,仅在信息列中,但是仅当表1在表2中具有匹配的字段时,并且仅在第一个表的id和第二个表的tid匹配时才更新。

因此,例如表1 id 1和表2 tid 1匹配,但是field_1或field_2与表1的字段号不同。

表1的ID 2和表2的ID TID 2匹配,并且field_2确实具有匹配的数字作为表1中的字段,因此我想将表2的记录2的info_2更改为我选择的数字。 假设是50。在所有情况下,info_1或info_2中的数字都将更改为50。

现在,表1的ID 3和表2的ID 3匹配,并且field_1具有匹配的数字作为表1中的字段,因此我需要将表2中的第3条记录的info_1更改为50。

在记录4中,id和tid匹配,但没有字段匹配,因此跳过该字段。

在记录5中,即使表2的field_2与表1中的字段匹配,第一个表的id和第二个表的tid也不匹配,因此可以跳过第5个记录。

这是我到目前为止尝试过的:

$updatequery1 = "UPDATE table2 LEFT JOIN table1 a ON a.field = field_1 SET info_1 = 50";
$updateresult1 = mysql_query($updatequery1) or die(mysql_error());

因此,对于第一次尝试,我没有将id和tid设置为匹配,我只是去寻找字段匹配。 我也没有加入field_2。 甚至不确定是否可以一次完成所有操作,或者是否需要多个查询。 在任何情况下,即使没有字段匹配,此尝试也会使所有info_1值等于50。

有人可以帮助我进行此查询,并在可能的情况下同时更改两个信息列吗?

如果我要执行选择查询以选择与表1 id和表2 tid相匹配的所有记录,则将是这样,但不知道如何将其合并到更新查询中。

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2
ON table1.id = table2.tid

我也可以尝试合并字段匹配,可能是这样的:

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2
ON table1.id = table2.tid
WHERE table1.field = table2.field_1
OR table1.field = table2.field_2

但是再次,您将不知道如何将其转换为更新查询,以便info_1或info_2进行相应的更改。

因此,以更快的方式进行总结。 如果id和tid匹配且field和field_1匹配,则info_1应更改为50。如果id和tid匹配且field和field_2匹配,则info_2应更改为50

您可以在SET使用CASE语句

UPDATE Table2 as T2
JOIN Table1 T1
ON T2.tid = T1.id
set 
info_1 = CASE WHEN T2.field_1 = T1.field then 50 ELSE T2.field_1 END  ,
info_2 = CASE WHEN T2.field_2 = T1.field then 50 ELSE T2.field_2 END 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM