[英]MySQL: join grouped data to table - only first row joined
我在连接具有以下内容的表时遇到问题:
表RingOrderItem
:
+----+-------------+--------+
| ID | ID_RingType | Amount |
+----+-------------+--------+
| 1 | A | 100 |
| 2 | B | 50 |
| 3 | A | 500 |
| 4 | C | 100 |
+----+-------------+--------+
分组表的Rings
SELECT min(Rings.Number) AS Number, ID_RingType FROM Rings GROUP BY ID_RingType
语句:
+--------+-------------+
| Number | ID_RingType |
+--------+-------------+
| 1 | A |
| 1 | B |
+--------+-------------+
我想从RingOrderItem
检索所有记录,并从分组表Rings
到它们的RingOrderItem
号,为此我使用了以下查询:
SELECT
roi.ID,
roi.ID_RingOrder,
roi.ID_RingType,
roi.Amount,
min(r.Number) AS `FromValue`,
min(r.Number) + roi.Amount - 1 AS `ToValue`
FROM
RingOrderItem AS roi
LEFT JOIN
(SELECT min(Rings.Number) AS Number, ID_RingType FROM Rings
GROUP BY ID_RingType)
AS r ON r.ID_RingType = roi.ID_RingType;
由于某种原因,我仅从RingOrderItem
表中获得第一行:
+----+--------------+-------------+--------+-----------+---------+
| ID | ID_RingOrder | ID_RingType | Amount | FromValue | ToValue |
+----+--------------+-------------+--------+-----------+---------+
| 1 | 1 | A | 100 | 1 | 100 |
+----+--------------+-------------+--------+-----------+---------+
我想要所有行,并且如果数据不能被连接( ID_RingType
值C
), ID_RingType
返回NULL
。
谢谢Zbynek
我认为您在主查询上不需要两个min()函数,因为您已经在子查询中获取了min值。
另外,对可能为NULL
的列进行数学运算并不是一个好主意
尝试这个:
SELECT
roi.ID,
roi.ID_RingOrder,
roi.ID_RingType,
roi.Amount,
r.Number AS FromValue,
COALESCE(r.Number, 0) + roi.Amount - 1 AS ToValue
FROM
RingOrderItem AS roi
LEFT JOIN
(
SELECT
MIN(Rings.Number) AS Number,
ID_RingType
FROM
Rings
GROUP BY
ID_RingType
) AS r ON roi.ID_RingType = r.ID_RingType;
另外,将您的左连接ON子句切换为将第一个表列在第一位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.