我有一个保存计划记录的表 - 我们的计划程序使用一组特定的颜色来显示保存在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
并且最好将此交易作为一个过程。
如何在这种情况下链接这些表,是否可以进行这一陈述
答案 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
语句作为默认值。