mysql - 选择使用 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。
解决方案
如果您只有一个name1
或name2
给定ID
值的值,您可以使用像MAX
(or MIN
) 这样的聚合函数,它将从表中的所有值中为您提供该值IDs
。使用具有这些值的派生表,您可以JOIN
对原始表获取每个组合的name1
和name2
值:PK
IDs
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
推荐阅读
- pandas - 根据外部条件向 pandas 数据框添加列
- python - 在需要时从 dict 添加行替换列值
- unity3d - 使用 Unity 时的 2 个窗口
- bash - 如何解决 wget google docs redirect 的问题
- pytorch - 如何以非交互方式使用 fairseq interactive.py?
- java - DrawableCompat.setTint 不可靠?
- python - 在匹配特定条件的两个 numpy 数组中查找通用索引
- kubernetes - 如何在 Instio 上禁用 mtls?
- azure-application-insights - 来自不同实例的 kusto 项目
- typescript - Heroku TypeScript nodeJs 失败,因为默认路径 /app