我想将一个表中的user_Id插入到另一个表的parent_id中,但是这两个表之间没有共同的值。
P粉323224129
P粉323224129 2023-07-30 13:35:25
0
1
415
<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粉323224129
P粉323224129

全部回复(1)
P粉596161915

根据您的描述,您希望根据用户表和父母表之间的匹配值,更新子表中的 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,此查询应该是高效的。索引将显著加快查找过程,尤其是在处理大型数据集时。


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板