假设我有一个包含这些列和值的表格:
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的记录,仅在info列中,但仅当表1具有表2中的匹配字段时,并且仅当第一个表的id和第二个表的tid匹配时才需要。 / p>
例如,表1的id为1,表2的tid为1匹配,但field_1或field_2的字段编号与表1不同。
表1 id为2和表2 tid为2匹配,field_2确实具有匹配的数字作为表1中的字段,因此我想将表2的记录2的info_2更改为我选择的数字。让我们只说50.在所有情况下,info_1或info_2中的数字将更改为50。
现在表1的id为3,表2的tid为3匹配,field_1的匹配编号为表1中的字段,所以我需要将info_1更改为50,表2中的第3条记录。
在记录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_1匹配,则info_1应更改为50.如果id和tid匹配且字段和field_2匹配,则info_2应更改为50
答案 0 :(得分:0)
您可以在CASE
SET
声明
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