根据另一个表中的数据更新行

时间:2014-05-14 14:14:30

标签: mysql sql

我有一个保存计划记录的表 - 我们的计划程序使用一组特定的颜色来显示保存在MySQL表中的约会的当前状态 - 有关这些约会的更多数据保存在mysql的单独表中 - (这是此数据库工作的唯一方式,因为某些约会不会一直安排在这种情况下,它们将存在于"调用"表中,而不会存在于"约会"表中

表设计:

appointments
Uniqueid | Label | CustomField1
    1    |   1   |      22
    2    |   1   |      31
    3    |   1   |      76

calls
RID | Rentry | Rdisp | Rconf | Renrt | Ronsc | Rtrans | Rdest | Rclr
 22 |  <dt>  |  <dt> |  NULL | NULL  |  NULL  |  NULL |  NULL | NULL
 31 |  <dt>  |  <dt> |  <dt> | NULL  |  NULL  |  NULL |  NULL | NULL
 50 |  <dt>  |  NULL |  NULL | NULL  |  NULL  |  NULL |  NULL | NULL
 76 |  <dt>  |  <dt> |  <dt> | <dt>  |  <dt>  |  NULL |  NULL | NULL

CustomField1表示&#34;调用&#34;中同一行的RID。我需要运行一个更新语句来更新&#34;标签&#34;如果Rdisp |中有值,则基于off Rconf | Renrt | Ronsc | Rtrans | Rdest | RCLR。

基本上运行以下模式:

not null | Label value
 Rdisp   |    0
 Rconf   |    1
 Renrt   |    2
 Ronsc   |    3 
 Rtrans  |    4
 Rdest   |    5
 Rclr    |    6

在select语句中我会离开加入,但我不确定这是否可以在更新语句中

基本上

UPDATE `appointments` SET `Label` = 0 WHERE `Rdisp` IS NOT NULL;
UPDATE `appointments` SET `Label` = 1 WHERE `Rconf` IS NOT NULL;
UPDATE `appointments` SET `Label` = 2 WHERE `Renrt` IS NOT NULL;
UPDATE `appointments` SET `Label` = 3 WHERE `Ronsc` IS NOT NULL;
UPDATE `appointments` SET `Label` = 4 WHERE `Rtrans` IS NOT NULL;
UPDATE `appointments` SET `Label` = 5 WHERE `Rdest` IS NOT NULL;
UPDATE `appointments` SET `Label` = 6 WHERE `Rclr` IS NOT NULL;

但是我们必须加入/链接约会.customField1到calls.RID

新加入声明:

UPDATE appointments a JOIN calls c 
ON a.CustomField1 = c.RID
SET a.Label = 0
WHERE `Rdisp` IS NOT NULL

并且最好将此交易作为一个过程。

如何在这种情况下链接这些表,是否可以进行这一陈述

1 个答案:

答案 0 :(得分:2)

除了在JOIN声明中使用UPDATE之外,您还可以使用CASE

UPDATE appointments a
JOIN calls c 
ON c.RID = a.CustomField1
SET a.Label = CASE
WHEN c.Rclr IS NOT NULL THEN 6
WHEN c.Rdest IS NOT NULL THEN 5
WHEN c.Rtrans IS NOT NULL THEN 4
WHEN c.Ronsc IS NOT NULL THEN 3
WHEN c.Renrt IS NOT NULL THEN 2
WHEN c.Rconf IS NOT NULL THEN 1
WHEN c.Rdisp IS NOT NULL THEN 0
END

您还可能需要ELSE语句作为默认值。