通过连接选择多个表的行

时间:2014-07-29 10:17:35

标签: postgresql join

我有一些彼此相关的表格。

简短演示:

站点:

 id | clip_id | article_id | unit_id
--------------+------------+--------
  1 | 123     |  12        |  7

剪辑:

id | title  | desc |
------------+--------
 1 | foo2   | abc1 

文章:

id | title  | desc | slug
------------+---------------------
 1 | foo2   | abc1 | article.html

单位:

 id | vertical_id | title |
------------------+-------+
  1 | 123         |  abc  |      

垂直行业:

id | name  | 
-----------+
 1 | vfoo  |

现在我想做类似下面的事情:

SELECT ALL VERTICAL, UNIT, SITE, CLIP, ARTICLE attributes 
from VERTICAL, UNIT, SITE, CLIP, ARTICLE TABLES 
WHERE vertical_id = 2

有人可以帮助我如何使用joins吗?

2 个答案:

答案 0 :(得分:1)

以下是您可能想要的运行示例:http://sqlfiddle.com/#!15/af63b/2

select * from
sites
inner join units on sites.unit_id=units.id
inner join clips on clips.id=sites.clip_id
inner join articles on articles.id=sites.article_id
inner join verticals on verticals.id=units.vertical_id
where units.vertical_id=123

问题是,您提供给我们的描述没有明确指定要加入的列:

  1. (已回答)为什么units通过sitesite_id链接指向sites的链接units通过unit_id
  2. (已回答)为什么units通过verticalsvertical_id链接指向verticals的链接units通过unit_id
  3. 我猜你的数据并不是一个使用连接获取行的一致例子。对于vertical_id=123verticals中没有相应的条目。

    修改

    由于问题中的更正,我更正了SQL。有了这个,这两个问题就得到了回答。

答案 1 :(得分:0)

select s.id, s.clip_id, s.article_id, u.title, u.vertical_id, c.title, v.unit_id, c.desc, a.slug 
from sites s
join units u on s.id = u.id
join clips c on u.id = c.id
join verticals v on c.id = v.id
join articles a on v.id = a.id
where v.vertical_id = 'any id'