繁体   English   中英

MySQL:将分组数据连接到表-仅连接第一行

[英]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_RingTypeC ), 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.

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