簡體   English   中英

UPDATE查詢中的自引用MySQL表

[英]Self-referencing MySQL table in UPDATE-query

我有以下情況:

涉及3個表,“患者”,“用戶”和“中心”。 它們具有以下屬性和關系:

'患者':

  • pid =主鍵
  • doc =“用戶”的“ uid”的外鍵
  • localid =默認設置為“ -1”

“用戶”:

  • uid =主鍵
  • cid =“中心”的“ cid”的外鍵

'中央':

  • cid =主鍵

患者沒有直接分配到中心。 而是將它們分配給特定用戶,然后將其分配給一個中心。

當前,所有患者的患者“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM