Postgresql中join语句的替代方法

时间:2016-12-02 12:29:09

标签: sql postgresql join

我有这种情况:

table_a
color   |   height  | size
'Blue'  |   10      |   1
'Red'   |   15      |   2
'Green' |   10      |   1
'White' |   5       |   null

table_b
name        |   age |   color       |   height
'Paul'      |   27  |   'Red'       |   15
'Joseph'    |   19  |   'Green'     |   10
'John'      |   22  |   'Purple'    |   5
'Eric'      |   34  |   'Blue'      |   21

基本上我试图获取table_b中的所有寄存器,只有当table_a中的大小不为null时,高度和颜色才与table_a中的相应值匹配。我用内连接和where子句实现了这个目标。像这样:

select * from table_b b
    inner join table_a a on a.height = b.height and a.color = b.color 
where
    a.size is not null

这有效,但我不确定这种方法是一个好的(或最好的)解决方案。对于这种情况,join语句是最好的还是有最佳选择?

我正在使用Postgresql 9.4。

感谢。

1 个答案:

答案 0 :(得分:2)

我没有看到使用内部联接的问题,这很好。 也许只需添加SELECT DISTINCT *即可避免重复输入,因为@ Nick.McDermaid说。

但如果您更喜欢“旧”的加入方式,您也可以这样做:

SELECT b.*
FROM table_b b, table_a a
WHERE a.size IS NOT NULL
      AND (b.height = a.height AND b.color = a.color);