首页 > 解决方案 > 选择使用 id 和同一列的值填充空字段

问题描述

我有一张这样的桌子:

  PK |  IDs | name1 | name2
    -------------------
   1 |  1   |  a    | null  
   2 |  1   |  a    |  x
   3 |  2   |  b    | null  
   4 |  3   |  c    |  z
   5 |  2   | null  |  y
   6 |  1   | null  |  x
   7 |  2   |  b    | null
   8 |  2   | null  | null

我想在 mySQL 中执行一个选择,给我这样的输出:

  PK |  IDs | name1 | name2
    -------------------
   1 |  1   |  a    |  x
   2 |  1   |  a    |  x
   3 |  2   |  b    |  y
   4 |  3   |  c    |  z
   5 |  2   |  b    |  y
   6 |  1   |  a    |  x
   7 |  2   |  b    |  y
   8 |  2   |  b    |  y

所以所有具有相同id的行都有相同的name1和name2,检查它不为null的行来填充它,如果没有,它将继续为null。

标签: mysqlsqlselect

解决方案


如果您只有一个name1name2给定ID值的值,您可以使用像MAX(or MIN) 这样的聚合函数,它将从表中的所有值中为您提供该值IDs。使用具有这些值的派生表,您可以JOIN对原始表获取每个组合的name1name2值:PKIDs

SELECT d.PK, d.IDs, m.name1, m.name2
FROM data d
JOIN (SELECT IDs, MAX(name1) AS name1, MAX(name2) AS name2
      FROM data
      GROUP BY IDs) m ON m.IDs = d.IDs

输出:

PK  IDs     name1   name2
1   1       a       x
2   1       a       x
3   2       b       y
4   3       c       z
5   2       b       y
6   1       a       x
7   2       b       y
8   2       b       y

SQLFiddle 上的演示


推荐阅读