Không dễ dàng vì bạn có số lượng sản phẩm phù hợp ở hàng cuối cùng khác với các hàng khác. Bạn có thể làm điều đó với một số loại toán tử GROUP_CONCAT () (có sẵn trong MySQL; có thể triển khai trong DBMS khác, chẳng hạn như Informix và có thể là PostgreSQL), nhưng tôi không tự tin về điều đó.
Đối sánh theo cặp
SELECT p1.product_name AS name1, p2.product_name AS name2, COUNT(*)
FROM (SELECT p.product_name, h.transaction_id
FROM products AS p
JOIN transactions_has_products AS h ON h.product_id = p.product_id
) AS p1
JOIN (SELECT p.product_name, h.transaction_id
FROM products AS p
JOIN transactions_has_products AS h ON h.product_id = p.product_id
) AS p2
ON p1.transaction_id = p2.transaction_id
AND p1.product_name < p2.product_name
GROUP BY p1.name, p2.name;
Xử lý trận đấu ba không phải là tầm thường; mở rộng nó xa hơn thế chắc chắn là khá khó khăn.