繁体   English   中英

MySQL需要子选择或临时表

[英]MySQL need sub select or temporary table

我有2张桌子。

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

如果此产品在任何合作伙伴渠道中未处于活动状态(active_status = 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

我想要有这样的结果表产品:

products_id | partner_channel | active_status
1004,amazon,0

因为在所有partner_channel中只有此产品id(1004)具有active_status = 0。

我想我在WHERE过滤器中遗漏了一些东西,但对此没有任何线索。 也许我应该在LEFT JOIN到products_catalog时使用子查询?

任何帮助将不胜感激。

谢谢。

使用功能。

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;

你必须在HAVING子句中放置一个条件,如下所示:

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

此查询返回与其相关的所有 partner_channel active_status = 0所有products_id值。

然后,您可以使用上述查询作为派生表连接回原始表,以获取其余字段:

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

在这里演示

试试这个代码

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM