MySQL自连接缺失数据
P粉464208937
P粉464208937 2024-03-31 10:07:32
0
1
392

我想在表上执行自连接,以按列方式呈现值。对于每个对象,都有多个属性(最多达到已知限制),但并非所有对象的所有属性都被存储。我尝试过各种连接,但总是缺少行,我希望使用空值。

起始表:

对象ID 属性
1 一个 10
1 b 20
1 c 30
2 一个 15
2 c 25

我的目标(假设我知道三个可能的属性是 a,b,c)是

对象ID 一个 b c
1 10 20 30
2 15 25

P粉464208937
P粉464208937

全部回复(1)
P粉563446579

您可以使用以下查询来实现它:

SELECT
    ObjectID,  
    SUM(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
    SUM(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
    SUM(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
FROM mytable
GROUP BY ObjectID

说明:

使用 CASE 语句,我们选择 Attribute 的值作为特定值,即“a”、“b”等。因此,对于该特定列,仅选择该特定属性的值。

使用 SUM 我们聚合 Value 字段的值。这样,任何 ObjectID 的多行值都会聚合到一行中。

如果您不愿意使用 SUM 因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX ,如下所示:

SELECT
    ObjectID,  
    MAX(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
    MAX(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
    MAX(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
FROM mytable
GROUP BY ObjectID
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板