2013-05-20 66 views
1

我的測試表:有條件加入一個表

create table products (
    product varchar(50) primary key, 
    show_reviews boolean 
); 
create table reviews (
    review_id integer primary key, 
    product varchar(50) references products (product), 
    review varchar(200) 
); 
insert into products (product, show_reviews) values 
    ('blender', true), 
    ('toaster', false), 
    ('microwave', true); 
insert into reviews (review_id, product, review) values 
    (1, 'blender', 'Excellent'), 
    (2, 'toaster', 'Terrible'), 
    (3, 'toaster', 'Would not buy again'), 
    (4, 'microwave', 'Wonderful'), 
    (5, 'microwave', 'Splendid'); 

我在尋找產生一個結果集,這樣的查詢:

product | show_reviews | review_id | review 
-------------+----------------+-------------+---------- 
    blender | true   | 1   | Excellent 
    toaster | false   | null  | null 
    microwave | true   | 4   | Wonderful 
    microwave | true   | 5   | Splendid 

從本質上講,我想有條件地加盟reviews表取決於show_reviews的值。這是我想出的:

select products.*, rev.* 
from products 
left join (
    select reviews.* 
    from reviews 
    join products as p on p.product = reviews.product 
    where p.show_reviews = true 
) as rev on rev.product = products.product; 

有什麼其他方法可以做到這一點?

回答

1
select * 
from 
    products p 
    left join 
    reviews r on r.product = p.product and p.show_reviews 
; 
+0

優秀。我想我還是不瞭解聯結以及我以爲我做的。 – Snowball