2016-09-13 5 views
0

私はテーブルの商品を持っています。すべての権利テーブルが設定されている必要があるレコードを登録するにはどうすればよいですか?

製品には多くのものがありますからproduct_featuresです。

私はすべてを返すようにしたい、そしてそれはを持って製品を返しますので、ケースの特徴1、及び機能2の両方を持っているだけ製品なので、一般的なLEFT JOINをが、この中では動作しませんフィーチャー1またはフィーチャー2

誰かが正しい方向に向けることができますか?

+0

2つの内部結合を使用できます。 –

答えて

1

あなたは、内側のことで、グループに参加し、answwrがセットでfeatursは、OLAP機能を通じて一度だけ

+0

これは、フィーチャ '1'と '2'がそれぞれ特定の製品のproduct_featuresレコードを1つしか持たないことを前提としています。これはおそらくそうですが、それを確認する必要があります。 – PinnyM

+0

@PinnyM両方の( 'feature1'、 'feature2')を持つすべての製品でクエリが動作するはずです。 – scaisEdge

+0

はい、しかし、機能(1)に2つのレコードがあり、機能 '1レコードはありません。これを回避するには 'COUNT(DISTINCT pf.feature_id)= 2'を使うことができます。 – PinnyM

0

存在しているという事実に基づいている

select p.* from products as p 
inner join product_features as pf on pf.product_id = p.id 
inner join features as f on f.id = pf.feature_id 
where f.feature_id in ('feature1', 'feature2') 
group by product 
having count(*) =2; 

ものを用いることができ、あなたはこれを達成することができます。 以下のクエリは、各製品の特徴を数えます。 2つの機能を持つすべての製品を返します。

select pid, pname, fid 
from (
    select t1.pid, t1.pname,t2.fid,count(distinct fid) over(partition by t1.pid, t1.pname) cnt from 
    products t1 left join product_features t2 
    on t1.pid = t2.pid 
) a 
where cnt = 2 
order by 1,2,3 
+0

私はOPが2つの_specific_機能に一致する製品を探していたと思いますが、2つの機能はありません – PinnyM

+0

彼はいくつかのサンプルデータ彼が期待している出力 – Syamala

関連する問題