2016-06-11 72 views
0

我使用两个具有一对多关系的Postgres表。主表称为用户,另一个表称为文件。查询具有一对多关系的两个表

用户表有以下栏目:

id SERIAL PRIMARY KEY, 
email VARCHAR(128) NOT NULL, 
username VARCHAR(128) UNIQUE NOT NULL, 
password_hash VARCHAR(128) NOT NULL 

的文件表有以下栏目:

id SERIAL PRIMARY KEY, 
user_id INTEGER REFERENCES users(id), 
title VARCHAR(128) NOT NULL, 
url VARCHAR(128) NOT NULL 

当我登录到我的应用程序,我查询所有的文件显示通过做

cur.execute('SELECT * from files') 

,当我想要一个特定用户的文件,我跑

​​

对于我的查询获取所有文件,我想调整它,以便我也获得与每个文件关联的用户名。我应该如何定制我的执行声明以实现这一目标?

+0

你问你应该如何将表连接在一起然后查询它? – Nicarus

回答

0

请尝试以下操作。我知道这个语法可以与其他dbms一起工作:

cur.execute('SELECT f.*, u.username from files as f, users as u where u.id = f.user_Id) 
+0

谢谢工作完美。所以'f。*'几乎可以说查询文件表中的所有内容? – Brosef

+0

就是这样。所有'正在f'正在做的是为该表提供别名,然后您可以在整个查询中使用该别名。很高兴我能帮上忙。 – JimmyB

+0

对于我的其他查询场景,我有用户ID可用,并希望用户文件和用户名,我试着调整你的代码到'cur.execute('选择f。*,u.username从文件作为f,用户作为你在哪里u.id =%i和f.user_id =%i'%(user_id,user_id))'。它可以工作,但是这是最好的方式吗? – Brosef

相关问题