2016-04-25 12 views
1

2つのテーブルがあります。この製品は(active_status = 0) 私が使用していたパートナーチャネルでアクティブでない場合はMySQLにサブ選択テーブルまたは一時テーブルが必要

First table - products 
products_id | quantity 

1001,1 
1002,2 
1003,5 
1004,4 


Second table - products_catalog 
products_catalog_id | products_id | partner_channel |active_status 

1,1001,amazon,0 
2,1001,ebay,0 
3,1001,zalando,1 
4,1002,amazon,1 
5,1002,ebay,0 
6,1003,amazon,1 
7,1003,ebay,1 
8,1003,zalando,1 
9,1004,amazon,0 
10,1004,ebay,0 
11,1004,zalando,0 

は私が条件と製品IDの結果を持ちたいWHEREこのようなフィルタ:

SELECT p.products_id, pc.partner_channel, pc.active_status 
    FROM products p 
     LEFT JOIN products_catalog pc ON pc.products_id=p.products_id  
    WHERE pc.active_status='0' 
GROUP BY p.products_id ORDER BY p.products_id; 

WHERE active_status = 0が、結果はこのようなものだった:

products_id | partner_channel | active_status 
1001,amazon,0 
1002,ebay,0 
1004,amazon,0 

私はこのような結果テーブルの製品を持つようにしたい:

active_status = 0

を持っているだけで、この製品ID(1004)ため、すべてのpartner_channelで

products_id | partner_channel | active_status 
1004,amazon,0 

私は私がWHEREフィルタで何かを逃したと思いますが、それについての手掛かりを持っていませんでした。たぶん私はproducts_catalog LEFT JOINにサブクエリを使用する必要がありますか?

ご協力いただければ幸いです。

ありがとうございました。あなたはこのようなHAVING句に条件を配置する必要が

+0

あなたがバイオリンを作ってくださいすることができ、pc.products_id BY '' GROUPで試すことができます.... –

答えて

1

SELECT products_id 
FROM products_catalog 
GROUP BY products_id 
HAVING SUM(active_status <> 0) = 0; 

このクエリは、すべてのpartner_channelそれらが関連しているためactive_status = 0を持つすべての​​の値を返します。

あなたはその後、残りのフィールドを取得するために、元のテーブルに参加するために派生テーブルとして上記のクエリを使用することができます

SELECT p.*, pc.* 
FROM products p 
JOIN products_catalog pc ON pc.products_id=p.products_id 
JOIN (
    SELECT products_id 
    FROM products_catalog 
    GROUP BY products_id 
    HAVING SUM(active_status <> 0) = 0 
) AS g ON g.products_id = p.products_id 
ORDER BY p.products_id 

Demo here

+0

これが働いています!ありがとう@Giorgios Betsos! –

0

このコード

をお試しください
SELECT p.products_id, pc.partner_channel, pc.active_status 
    FROM products p 
     LEFT JOIN products_catalog pc ON pc.products_id=p.products_id  
    WHERE pc.active_status='0' 
GROUP BY p.products_id ORDER BY p.products_id DESC; 
+0

これは私の答えのコピー/ペーストのようです。これは許されていません。 –

2

使用がある。

SELECT p.products_id, ANY_VALUE(pc.partner_channel), ANY_VALUE(pc.active_status) 
    FROM products p 
     LEFT JOIN products_catalog pc ON pc.products_id=p.products_id 
GROUP BY p.products_id 
having sum(pc.active_status)=0 
    ORDER BY p.products_id; 
関連する問題