搜尋

首頁  >  問答  >  主體

我想將一個表中的user_Id插入到另一個表的parent_id中,但是這兩個表之間沒有共同的值。

<p style="white-space:normal;">我目前有三個表格:</p><p style="white-space:normal;">users表格// 資料在註冊時插入<pre class="brush:php;toolbar:false;">usersId //PRIMARY KEY userfName userlName userUid email userPwd dateTime</pre> <p><code>parent</code> table</p> <pre class="brush:php;toolbar:false;">id //PRIMARY KEY mFname mLname mEmail mPhone fFname fLname fEmail fPhone addressL1 addressL2 city stateAbbr zip created_at user_id //FOREIGN KEY</pre> <p>我使用了users表格中的email列以及mEmail或fEmail來將usersId插入到parents表格中。 </p> <p><code>Children</code> Table</p> <pre class="brush:php;toolbar:false;">child_id //PRIMARY KEY child1Name dobChild1 ageChild1 child2Name dobChild2 ageChild2 child3Name dobChild3 ageChild3 child4Name dobChild4 ageChild4 child5Name dobChild5 ageChild5 child6Name dobChild6 ageChild6 child7Name dobChild7 ageChild7 child8Name dobChild8 ageChild8 child9Name dobChild9 ageChild9 child10Name dobChild10 ageChild10 parent_id //FOREIGN KEY</pre> <p>在兒童桌和其他兩個表之間沒有共同的數值。我的期望是在使用者表和父表之間進行驗證,如果使用者表的usersId和父表的user_id相等,則將該值插入到children表的parent_id中。這種操作是否可行?我考慮使用交叉連接(cross join),但我擔心隨著資料庫中的條目數量增長,效能會受到影響。 </p> <pre class="brush:php;toolbar:false;">SELECT usersId FROM users; SELECT user_id FROM parent; UPDATE children (parent_Id) INNER JOIN parent ON children.parent_id = users.usersId UPDATE children SELECT usersId FROM users cross JOIN children.parent_id ON users.usersId = children.parent_id UPDATE children INNER JOIN users (INNER JOIN parent ON users.userId = parent.userId) ON users.usersId = parent.user_id SET children.parent_id = parent.user_Id;</pre> <p>我已經嘗試了每一種方法,但都沒有成功。我還嘗試改變連接的順序,但也沒有用。非常感謝您提供的任何幫助。 </p>
P粉323224129P粉323224129482 天前406

全部回覆(1)我來回復

  • P粉596161915

    P粉5961619152023-07-31 00:45:30

    根據您的描述,您希望根據使用者表和父母表之間的符合值,更新子表中的 parent_id 欄位。您想要使用使用者表的 usersId 和父母表的 user_id 來更新子表中的 parent_id。

    您可以使用下列 SQL 查詢來實作:


    UPDATE Children c
    SET c.parent_id = (
      SELECT p.user_id
      FROM users u
      JOIN parent p ON u.email = p.mEmail OR u.email = p.fEmail
      WHERE c.parent_id IS NULL -- Only update rows with NULL parent_id to avoid overwriting existing values
      LIMIT 1 -- Assuming you want to update one parent_id per child record; you may modify this as needed
    );

    解釋:

    1. UPDATE 語句用於更新 Children 表,將其別名為 c。
    2. 我們使用子查詢來尋找與 users 表中的電子郵件(符合 mEmail 或 fEmail)相對應的 parent 表中的 user_id。
    3. JOIN 條件是基於電子郵件配對連線 users 和 parent 資料表。
    4. WHERE 子句確保我們只更新 parent_id 目前為 NULL 的 Children 表中的行(如果您已經插入了一些 parent ID,這樣可以避免覆寫它們)。
    5. LIMIT 1 確保我們每個子記錄更新一個 parent_id;如果您需要為每個子記錄更新多個記錄,可以調整此值。

    在執行任何更新查詢之前,請務必備份資料庫,以確保安全性。 、

    至於您對於資料庫條目增長時效能的擔憂,只要在相關列上有適當的索引,例如users 表中的電子郵件以及parent 表中的mEmail 和fEmail,此查詢應該是高效的。索引將顯著加快查找過程,尤其是在處理大型資料集時。


    回覆
    0
  • 取消回覆