[英]SQL Join two tables only if they both contain all records
我有samples
、 sample_products
、 products
、 orders
和order_products
。
样品 <=> 产品(通过sample_products
)
订购 <=> 产品(通过order_products
)。
Order 和 Samples 之间没有任何联系。
现在我需要找到订单中最常用的样品。 这尤其是一个问题,因为如果我们有一个 package 的 2 种产品 - 产品 A 和产品 B,则订单需要同时包含这两种产品,而不仅仅是产品 A 或不仅是产品 B。订单必须仅包含且恰好包含这 2 种产品被视为样品。
我尝试像这样加入他们,但这会导致我之前提到的问题 - 它不能确保订单不包含其他产品或 A 和 B 都存在。
SELECT * FROM samples
INNER JOIN sample_products ON sample_products.sample_id = samples.id
INNER JOIN products ON products.id = sample_products.product_id
INNER JOIN order_products ON order_products.product_id = products.id
INNER JOIN orders ON orders.id = order_products.order_id
如果产品 A 和 B 都存在,我如何确保它只将表格连接在一起?
如果你想计算完整的样本集(如果 sample1 由 A、B、C 组成 -> 用 A、B、C 计算顺序),你可以使用产品数量进行连接:
SELECT order_sample_count.sample_id,
COUNT(order_sample_count.order_id) as sample_use
FROM
(
SELECT sample_id, count(product_id) as semple_numbers
FROM
(
SELECT DISTINCT sample_id, sample_products.product_id
FROM samples
INNER JOIN sample_products ON sample_products.sample_id = samples.id
) AS sample_distinct
GROUP BY sample_id
) AS semple_count
INNER JOIN
)
SELECT order_id, sample_id, count(product_id) as semple_numbers
FROM
(
SELECT DISTINCT order_products.order_id, sample_products.sample_id, order_products.product_id
FROM order_products
INNER JOIN sample_products ON sample_products.product_id = order_products.product_id
) AS order_sample_distinct
GROUP BY order_id, sample_id
) AS order_sample_count ON semple_count.sample_id = order_sample_count.sample_id
AND semple_count.semple_numbers = order_sample_count.semple_numbers
GROUP BY order_sample_count.sample_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.