我正在从 Excel 工作表导入数据,现在我有一个包含父行和子行的表。子行与父行具有大致相同的列,除了子行在 A 列中具有空值,这是父行的主键和子行的外键。
样本数据
- AI ID | Employee Number | Employee Name
- 1 | 33400 | John
- 2 | NULL | John's Wife
- 3 | NULL | John's Child
- 4 | 43443 | Susan
- 5 | NULL | Susan's Husband
如何使用其父行的值填充具有 NULL 的行 2,3,4 Employee Number。
这样员工编号列就变成这样了
- 33400
- 33400
- 33400
- 43443
- 43443
注意:更新
这是一个真实的场景,因此不需要父行的字段来标识它的子行。不幸的是,上表暗示
employee name
正在这样做。实际上 识别子-父行依赖项是
AI ID
列。当所有行都按 employer number NOT NULL
排序时,每个子行都属于其上方的第一行 AI ID
。所以理想情况下,我正在查看执行以下操作的查询:IF Employee_Number IS NULL
SELECT Employee_Number OF FIRST ROW
WHERE Employee_Number IS NOT NULL AND ROW_ABOVE.AI_ID < CURRENT_ROW.AI_ID
上面那种东西。
最佳答案
SELECT t1.`AI ID`,
t2.`Employee Number`,
t1.`Employee Name`
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.`Employee Name` LIKE CONCAT('%', t2.`Employee Name`, '%')
WHERE t2.`Employee Number` IS NOT NULL;
输出:
演示:
Rextester
后期编辑:
看到@Giorgos 的回答让我想知道您是否真的要更新您的表格。如果是这样,我的查询可以稍微修改为:
UPDATE yourTable t1
INNER JOIN yourTable t2
ON t1.`Employee Name` LIKE CONCAT('%', t2.`Employee Name`, '%')
SET t1.`Employee Number` = t2.`Employee Number`
WHERE t2.`Employee Number` IS NOT NULL;
关于mysql - 在 MySQL 中为子行选择父行单元格值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42852513/