首页  >  问答  >  正文

MySQL自连接缺失数据

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

起始表:

对象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粉464208937P粉464208937219 天前344

全部回复(1)我来回复

  • P粉563446579

    P粉5634465792024-04-01 09:26:44

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

    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

    回复
    0
  • 取消回复