如何通过相同UnitOfMeasureId关联两张表查询UOM及对应规格数据
查询实现方案
本次查询的核心是通过UnitOfMeasure表和UnitOfMeasureSize表的关联外键做联结,过滤指定的UOM Id即可拿到所需数据,默认关联条件为 UnitOfMeasure.Id = UnitOfMeasureSize.UnitOfMeasureId,如果你的外键字段命名有差异可自行调整。
基础查询(每条规格对应一条返回记录)
SELECT uom.Id AS UomId, uom.Name AS UnitOfMeasureName, -- 可自行补充需要的UnitOfMeasure表其他字段 uoms.Id AS UomSizeId, uoms.SizeValue, uoms.Description AS SizeDescription -- 可自行补充需要的UnitOfMeasureSize表其他字段 FROM UnitOfMeasure uom INNER JOIN UnitOfMeasureSize uoms ON uom.Id = uoms.UnitOfMeasureId WHERE uom.Id = 你要查询的UOM_ID;
聚合查询(同一UOM的所有规格合并为一条返回记录)
- MySQL版本:
SELECT uom.Id AS UomId, uom.Name AS UnitOfMeasureName, GROUP_CONCAT(uoms.SizeValue SEPARATOR ', ') AS AllSizeValues, GROUP_CONCAT(uoms.Description SEPARATOR '; ') AS AllSizeDescriptions FROM UnitOfMeasure uom INNER JOIN UnitOfMeasureSize uoms ON uom.Id = uoms.UnitOfMeasureId WHERE uom.Id = 你要查询的UOM_ID GROUP BY uom.Id, uom.Name;
- SQL Server/PostgreSQL版本:
SELECT uom.Id AS UomId, uom.Name AS UnitOfMeasureName, STRING_AGG(uoms.SizeValue, ', ') AS AllSizeValues, STRING_AGG(uoms.Description, '; ') AS AllSizeDescriptions FROM UnitOfMeasure uom INNER JOIN UnitOfMeasureSize uoms ON uom.Id = uoms.UnitOfMeasureId WHERE uom.Id = 你要查询的UOM_ID GROUP BY uom.Id, uom.Name;
注意事项
- 如果你需要返回没有关联任何规格的UOM单位信息,把查询中的
INNER JOIN替换为LEFT JOIN即可。 - 上述查询中的字段可根据你实际的表字段定义做增删调整。


内容的提问来源于stack exchange,提问作者Matthew Lemke
相关产品推荐
相关产品推荐

