首页 > 解决方案 > 仅当两条或多条记录具有相同值时才连接两个表并进行分组

问题描述

我有 2 张桌子:

manifests
id | customer | paid_order | price | payment_method

paid_orders
id | paid

JOIN paid_orders ON manifests.paid_order = paid_order_id

让我们假设这种情况:
有 2 个相同customer但有不同的payment_method.

customer | paid_order | price | payment_method |  paid  |
    1    |      1     | 200   |        0       |  200   |
    1    |     NULL   | 100   |        1       |  NULL  |
    2    |     NULL   | 150   |        1       |  NULL  |

我只想GROUP BY customer而且只有payment_method当有0 两个相同的客户时才选择。

预期结果:

customer | paid_order | price | payment_method |  paid  |
    1    |      1     | 200   |        0       |  200   |
    2    |     NULL   | 150   |        1       |  NULL  |

标签: mysqlrelational-database

解决方案


一种方法是始终从一个或可能多个payment_method具有最小值的客户记录中选择记录:

SELECT m1.*
FROM manifest m1
INNER JOIN
(
    SELECT customer, MIN(payment_method) AS min_payment_method
    FROM manifest
    GROUP BY customer
) m2
    ON m1.customer = m2.customer AND m1.payment_method = m2.min_payment_method;

这个逻辑应该起作用,因为如果存在payment_method零,那么这个记录将成为目标。否则,单值记录将成为目标。


推荐阅读