0

私は2つのテーブルを持っていitemsますbids.

create table items (
    id serial primary key,
    store_id int,
    min_bid int
);

create table bids (
    item_id int,
    amount int
);

アイテムを選択し、最高入札額に関する情報を含めたいです。

select items.*, max(bids.amount) from items
    join bids on bids.item_id = items.id
where items.store_id = $store_id
group by items.id

ただし、特定のアイテムに対する入札がない場合、そのアイテムは選択されません。入札がない場合でもアイテムが選択され、max(bids.amount)列に が表示されるようにするにはどうすればよいitems.min_bidですか? (0でもいいです。)

私はこれを試しました:

select items.*, coalesce(max(bids.amount), items.min_bid) from items
    join bids on bids.item_id = items.id
where items.store_id = $store_id
group by items.id

これは機能しません。そもそもアイテムが選択されていないのは、結合のためだと思います。

私は何をすべきか?

4

2 に答える 2

0

まず、入札のないアイテムを表示するには、次を使用する必要がありますLEFT JOIN

select items.*, max(bids.amount) 
from items
left join bids on bids.item_id = items.id
where items.store_id = $store_id
group by items.id
于 2013-07-01T15:09:11.887 に答える