1

私は3つのテーブルを持っています:

製品(p_id、prod_name)、競合他社(c_id、comp_name)、販売(p_id、c_id、price)。

それで、私がデータを持っているとしましょう:

(producs table)
p_id | prod_name
1    | product1
2    | product2

(competitors table)
c_id | comp_name
1    | competitor1

(sells table)
p_id | c_id | price
1    | 1    | 1.56

どこかでc_id=1を使用して、以下を取得したかった:

prod_name | price
product1  | 1.56
product2  | NULL

問題は、テーブル販売が製品と競合他社の間の唯一の反発であるということです。また、テーブル販売には、製品IDと競合他社IDの行がない場合があります。この場合、価格としてnullを返すようにします。一言で言えば、特定の競合他社(たとえば、comp_id = 1)のすべての商品を、価格またはテーブル販売に行が存在しない場合はnullで返したいと思います。

これを試しましたが、NULLの価格が返されないため、機能しませんでした。

SELECT prod_name, price
  FROM products
  LEFT JOIN sells ON products.p_id = sells.p_id
  LEFT JOIN competitors ON sells.c_id = competitors.c_id
 WHERE competitors.c_id = 1

SQLでそれを行うにはどうすればよいですか?

4

4 に答える 4

1
select prod_name, price 
from products 
left join sells 
    on products.p_id = sells.p_id 
left join competitors 
    on sells.c_id = competitors.c_id 
AND competitors.c_id = 1
于 2012-07-27T13:17:16.650 に答える
0

これは機能するはずです(SQL Fiddleを参照)。

select prodname, price
from products p
left join sells s
  on p.pid = s.pid
left join competitors c
  on s.cid = c.cid
where c.cid = 1 
  or c.cid is null
于 2012-07-27T13:29:06.577 に答える
0
SELECT p.prod_name, s.price
FROM products p
LEFT JOIN sells s ON p.p_id = s.p_id
WHERE s.c_id = 1
于 2012-07-27T13:34:19.730 に答える
0

競合他社との左結合ではなく、右結合が必要です。右結合は、左側のテーブルにレコードがあるかどうかに関係なく、右側のテーブルのすべてのレコードを返します。これは、左結合の動作とは逆です。

于 2012-07-27T13:18:11.817 に答える