我正在从 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;

输出:

mysql - 在 MySQL 中为子行选择父行单元格值-LMLPHP

演示:

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/

10-12 07:38