使用 SQL 更改外键

发布于 2024-11-07 10:25:38 字数 1481 浏览 3 评论 0原文

我有一个这样的表:

ID    Name      Email           Referred_by
-------------------------------------------
1     John      [email protected]    NULL
2     Sam       [email protected]     [email protected]
3     Sally     [email protected]   [email protected]
..... more rows .....

我想将其更改为:

ID    Name      Email           Referred_by
-------------------------------------------
1     John      [email protected]    NULL
2     Sam       [email protected]     1
3     Sally     [email protected]   2
..... more rows .....

我可以使用 SQL 进行此更改吗?

I have a table like this:

ID    Name      Email           Referred_by
-------------------------------------------
1     John      [email protected]    NULL
2     Sam       [email protected]     [email protected]
3     Sally     [email protected]   [email protected]
..... more rows .....

And I would like to change it to:

ID    Name      Email           Referred_by
-------------------------------------------
1     John      [email protected]    NULL
2     Sam       [email protected]     1
3     Sally     [email protected]   2
..... more rows .....

Can I make this change using SQL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谷夏 2024-11-14 10:25:38

这应该可以解决问题:

UPDATE my_table a
set    a.referred_by = (
       SELECT b.id
       FROM   my_table b
       WHERE  b.email = a.referred_by
);

This should do the trick:

UPDATE my_table a
set    a.referred_by = (
       SELECT b.id
       FROM   my_table b
       WHERE  b.email = a.referred_by
);
享受孤独 2024-11-14 10:25:38

许多 DBMS 将通过使用 DDL(定义)语句而不是 DML(操作)来实现这一点。假设 id 是整数类型,并且 referred_by 是(当前)文本列,您可以执行以下操作:

  • 更改表以添加新列 ref2< /code>(可为空)与 id 类型相同。
  • ref2id 之间设置外键约束。
  • 填充所有行的 ref2 列。
  • 放弃原来的约束。
  • 更改表以删除列 referred_by
  • 更改表以将列 ref2 重命名为 referred_by

Many DBMS' will allow this by the use of DDL (definition) statements rather than DML (manipulation). Assuming that id is an integral type and referred_by is (currently) a textual column, you can do something like:

  • alter the table to add a new column ref2 (nullable) of the same type as id.
  • set up a foreign key constraint between that ref2 and id.
  • populate the ref2 column for all the rows.
  • drop the original constraint.
  • alter the table to remove column referred_by.
  • alter the table to rename column ref2 to referred_by.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文