如何从MySQL中的另一个表中只选择第一个匹配值?
问题描述:
这里是我的数据库架构:如何从MySQL中的另一个表中只选择第一个匹配值?
付款表:
+------------+--------+--------+---------------------+
| payment_id | tab_id | amount | created |
+------------+--------+--------+---------------------+
| 1 | 1 | 5 | 2017-05-22 12:14:27 |
| 2 | 2 | 10 | 2017-05-22 12:15:21 |
| 3 | 2 | 1 | 2017-05-22 13:11:14 |
+------------+--------+--------+---------------------+
卡表:
+------------+----------------+
| tab_id | service_charge |
+------------+----------------+
| 1 | 1 |
| 2 | 3 |
+------------+----------------+
我需要计算每支付总金额(amount
+ service_charge
),但service_charge
应仅包含在匹配tab_id
的第一笔付款中。
我当前的查询:
SELECT
payment.payment_id,
(payment.amount + tab.service_charge) as total_amount,
payment.created
FROM payment
INNER JOIN tab
ON payment.tab_id = tab.tab_id;
实际结果:
正如你可以看到下面从tab_id = 2
service_charge
包括两次(payment_id = 2
和payment_id = 3
)。
+------------+-----------------+---------------------+
| payment_id | total_amount | created |
+------------+-----------------+---------------------+
| 1 | 6 | 2017-05-22 12:14:27 |
| 2 | 13 | 2017-05-22 12:15:21 |
| 3 | 4 | 2017-05-22 13:11:14 |
+------------+-----------------+---------------------+
预期结果:如下所示total_amount
不应包括在service_charge
payment_id = 3
。
+------------+-----------------+---------------------+
| payment_id | total_amount | created |
+------------+-----------------+---------------------+
| 1 | 6 | 2017-05-22 12:14:27 |
| 2 | 13 | 2017-05-22 12:15:21 |
| 3 | 1 | 2017-05-22 13:11:14 |
+------------+-----------------+---------------------+
答
您应该确定这是首付款匹配tab_id,然后根据这些信息,决定是否要使用service_charge与否:
+0
谢谢。简单而优雅。 –
见:我为什么要提供MCVE对于我来说似乎是一个非常简单的SQL查询?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-我想成为一个非常简单的sql查询) – Strawberry
@Strawberry我看了一下,但它仍然不清楚这个话题可以帮助我解决我遇到的问题。 –
阅读已接受的答案(已提高106次)。遵循简单的指示。看看会发生什么。 – Strawberry