我有这种情况:
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。
感谢。
答案 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);