繁体   English   中英

SQL 只有当两个表都包含所有记录时才加入它们

[英]SQL Join two tables only if they both contain all records

我有samplessample_productsproductsordersorder_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.

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