Postgresql:如何在两个表之间关联数据



我已经在Postgresql 9.3中搜索了这个问题,但没有看到任何具有足够答案的解决方案。Psql 文档也没有帮助。

假设我有两个表:

  • 用户(用户名、密码、ID)
  • 数据(标题、描述、ID)

我已经创建了一个外键,但我不太清楚它是如何工作的。我希望用户能够查看和编辑他们的数据,并且我希望数据与用户相关。这是我们在博客、Facebook或Twitter上经常看到的那种东西。

如何在表之间创建关系,以便用户提交的每条数据都与它们相关联?

假设两个表上的 id 都是用户的 id,则获取所有用户数据所需的是:

SELECT u.username, d.title, d.description
FROM users u
LEFT JOIN data d ON d.id = u.id

如果没有数据,d.titlea 和 d.description 将为 NULL。如果您只希望用户拥有数据,只需将LEFT JOIN替换为JOIN

编辑:(基于评论)

如果您希望用户拥有

数据的所有权,并且数据一次只属于某个用户,则只需在data表中拥有user_id。我假设表中的id是用户的。在这种情况下,在创建表时,您需要执行以下操作:

CREATE TABLE data (
  id SERIAL,
  title varchar(50) NOT NULL,
  description varchar(255),
  user_id references users(id) -- this is your foreign key
);

然后再次查询user_id调整:

SELECT u.username, d.title, d.description
FROM users u
LEFT JOIN data d ON d.user_id = u.id

最新更新