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

Postgresql:如何在两个表之间关联数据?,postgresql,Postgresql,我在Postgresql 9.3中搜索了这个问题,但没有找到答案充分的解决方案。Psql文档也没有帮助 假设我有两张桌子: 用户(用户名、密码、id) 数据(标题、说明、id) 我已经创建了一个外键,但我不太清楚它是如何工作的。我希望用户能够查看和编辑他们的数据,我希望数据与用户相关。这是我们经常在博客、facebook或twitter上看到的事情 如何在表之间创建关系,以便用户提交的每个数据都与表关联 假设两个表上的id都是用户的id,则需要获取所有用户数据: SELECT u.usern

我在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将为空。如果您只希望用户使用数据,只需将
左连接
替换为
连接

编辑:(基于评论)

如果希望用户拥有数据的所有权,并且数据一次只属于用户,则只需在
数据
表中设置
用户id
。我假设表中的
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
);
然后再次使用用户id调整进行查询:

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

是的,按照操作说明读。我不清楚那里发生了什么。它似乎解释了跨多个表的查询,而不是以我所描述的方式关联它们的数据(给
用户
各种
数据的所有权
)。在解释这些不同的连接概念,甚至是表之间关联数据的命令(不仅仅是查询数据)时,您能提供更多帮助吗?如果你觉得指南很明显的话,我自己对这一点的误解应该很清楚。谢谢,谢谢。那么,现在在没有数据的用户和有数据的用户之间设置此选项有什么区别呢?如果我使用
左连接,当前存在但尚未输入
数据的用户是否会被排除在外?这有什么意义?我只是想澄清一下,我不是问如何简单地查询表之间的数据。我希望用户拥有各种数据的所有权。我希望他们有关联。如果这不明显的话,我是数据库设计新手:)所以我的术语在这里可能很糟糕。这取决于查询的目的。否,
LEFT JOIN
存在,因此没有数据的用户不会被排除在结果之外set@Proto检查我的编辑。您可以使用外键在表之间引用(用您的话来说是relate)数据。在这里,您不会从零开始学习设计数据库,但是如果您有一些实际问题,我很乐意回答help@Proto:请注意,如果user_id是唯一的,则最好通过向users表中添加title和description字段来创建一个表。如果它不是唯一的,那么它就是一种潜在的代码味道,因为它看起来很像实体属性值反模式。