【问题标题】:Relate two tables by one matching key in SQL?在 SQL 中通过一个匹配键关联两个表?
【发布时间】:2021-04-02 00:52:48
【问题描述】:

我对 SQL 很陌生,我知道 FOREIGN KEY,但我想不出一种通过一个键匹配将两个表相互链接的方法。

因此,例如,有一个用户的“姓名”设置为“约翰”,一个帖子的“作者”设置为“约翰”。

我应该编写什么查询让 SQL 浏览“用户”表,找到与帖子作者匹配的内容,并将 FOREIGN KEY 设置为该用户的 ID?

【问题讨论】:

    标签: mysql sql database-design inner-join create-table


    【解决方案1】:

    假设你已经有一个users 和一个posts 表,其中posts 有一个user_id foreign key 引用users.id,你可以这样做:

    update posts
    join users
    on posts.author = users.name
    set posts.user_id = users.id;
    

    您可能面临的问题是某些名称可能重复。

    【讨论】:

      【解决方案2】:

      这是一对多的关系。

      您将按如下方式构建表:

      create table users (
          user_id int primary key auto_increment,
          name varchar(50)
      );
      
      create table posts (
          post_id int primary key auto_increment,
          user_id int not null,
          content varchar(200),
          constraint fk_user_id foreign key (user_id) references users(user_id)
      );
      

      然后你可以使用外键加入表:

      select p.*, u.name as user_name
      from posts p
      inner join users u on u.user_id = p.user_id
      

      【讨论】:

      • 我相信提问者想知道更新 posts.user_id 的方式,以便它具有正确的 users.id 值,通过名称-作者逻辑关系链接,请参阅我的答案。
      • 感谢您的回答!是的,我有两个 JSON 文件,里面有一堆用户和帖子。我打算将它们解析成两个单独的表,我认为将它们相互关联的最佳方法是在为两个表播种并使用过滤器集进行某个 JOIN 查询之后添加一个 FOREIGN KEY。他们俩唯一匹配的键是名称。
      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2012-10-06
      • 2013-01-25
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多