2016-12-02 48 views
1

我有這樣的場景:替代連接語句在PostgreSQL

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 

基本上我試圖讓所有的表-B寄存器,高度和顏色與相應的值表-A匹配只有大小表-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 

這是有效的,但我不確定這種方法是一個好的(或最好的)解決方案。加入聲明對於這種情況是最好的,還是有最佳選擇?

我正在使用Postgresql 9.4。

謝謝。

+1

要關聯表之間的數據再加入是正確的做法。如果有重複計數的可能性(即'table_a'中有兩個'Red'條目),那麼'存在'可能會更好 –

+0

'JOIN'不是一個語句。它是一個*運算符*,它組合了兩個表(或*表表達式*),產生了一個新的表表達式。 – joop

回答

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);