gpt4 book ai didi

mysql - 从表 A 中查找与数据透视表 B 另一侧的表 C 具有某些 JOINS 的记录,但不查找其他记录

转载 作者:行者123 更新时间:2023-11-29 12:52:23 26 4
gpt4 key购买 nike

我有 3 个表 productsproduct_storesstoresstores 表中只有几个条目,而 product_stores 记录基本上意味着我们知道特定商店出售特定产品。

我们想要找到的是在商店 2、3、4、5 中出售但不在商店 9 中出售的一组产品。

这是我到目前为止所得到的,不确定我是否走在正确的轨道上,但看起来有点接近。我已经获得了我们知道某个产品存在的所有记录,但无法获取该产品未 JOIN(ed) 的商店...

SELECT s.id AS store_id, ps.id AS product_store_id, p.id AS product_id
FROM stores s
LEFT JOIN product_stores ps ON ps.store_id = s.id
RIGHT JOIN products p ON p.id = ps.product_id AND p.id = 8
HAVING store_id IN (2, 3, 4, 5, 9)

这会产生

+----------+------------------+------------+
| store_id | product_store_id | product_id |
+----------+------------------+------------+
| 2 | 178455 | 8 |
| 3 | 8 | 8 |
| 4 | 178454 | 8 |
| 5 | 178453 | 8 |
+----------+------------------+------------+

我想看到的是这个

+----------+------------------+------------+
| store_id | product_store_id | product_id |
+----------+------------------+------------+
| 2 | 178455 | 8 |
| 3 | 8 | 8 |
| 4 | 178454 | 8 |
| 5 | 178453 | 8 |
| 9 | NULL | 8 |
+----------+------------------+------------+

或者因为我真的只想要一个唯一的product_id列表,可以将其展平为具有唯一product_id的结果集。

我们正在使用 MySQL。您应该能够从我当前的查询中看到表之间的关系,但如果您需要其他信息,则可以通过 LMK 看到。 AND p.id = 8 仅用于限制测试目的的结果集。

最佳答案

内连接应该可以解决这个问题:

SELECT ps.product_id
FROM stores s INNER JOIN
product_stores ps
ON ps.store_id = s.id
GROUP BY ps.product_id
HAVING SUM(store_id = 2) > 0 and
SUM(stored_id = 3) > 0 and
SUM(stored_id = 4) > 0 and
SUM(stored_id = 5) > 0 and
SUM(stored_id = 9) = 0;

having 子句中的每个条件都会测试该产品是否位于其中一家商店。 sum() 计算商店中的行数,> 0 表示商店 2-5 至少有一个。 = 0 表示该产品不在商店 9 中。

关于mysql - 从表 A 中查找与数据透视表 B 另一侧的表 C 具有某些 JOINS 的记录,但不查找其他记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com