[英]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.