[英]Self-referencing MySQL table in UPDATE-query
我有以下情况:
涉及3个表,“患者”,“用户”和“中心”。 它们具有以下属性和关系:
'患者':
“用户”:
'中央':
患者没有直接分配到中心。 而是将它们分配给特定用户,然后将其分配给一个中心。
当前,所有患者的患者“ localid”均设置为“ -1”。 我正在尝试提出一个SQL查询,该查询为所有患者增加“ localid”,但仅在中心范围内,它们通过用户间接关联。
本质上,我希望所有患者的中心都具有唯一的ID,但是每个中心的ID应该从0开始。
这是我尝试过的查询,我认为它与我的需求很接近:
UPDATE patient p1
SET p1.localid=(SELECT (max(p2.localid) +1)
FROM patient p2
WHERE (SELECT u1.cid
FROM users u1
WHERE u1.uid=p1.doc)=(SELECT u2.cid
FROM users u2
WHERE u2.uid=p2.doc));
这将导致sql错误“您无法在FROM子句中指定目标表'p1'用于更新”,因为'p1'在WHERE子句中进行了引用。
我可以通过使用多个SQL查询和PHP中的循环来轻松解决此问题,但我想知道是否可以仅使用普通SQL来解决此问题?
除了使用子查询,您还可以使用子查询中的条件将表本身JOIN
,并为其指定别名。 那应该允许您更新查询的同一张表。
就像是...
UPDATE patient p1
SET p1.localid = p2.newlocalid
INNER JOIN (
SELECT pid, MAX(localid) + 1 AS newlocalid
FROM patient p2
WHERE...
) p2 ON p1.pid = p2.pid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.