我正在从Excel表中导入数据,而且我的表中有一个带有父行和子行的表。子行与父行的列大致相同,但A列中的子行为null,这是父行的主键,子行的外键将为子行。
样本数据
- 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
如何使用其父行的值填充具有空值的行2,3,4雇员号。
这样员工编号列就会变成这样
- 33400
- 33400
- 33400
- 43443
- 43443
注释: Update --这是一个真实的场景,因此不需要父行的任何字段来标识它的子行。不幸的是,上面的表格暗示着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
上面的那类东西。
发布于 2017-03-17 12:00:43
这里的演示:http://rextester.com/FDJYO55558
已经完成了以下操作,但我并不意味着它在任何方面都是有效的(资源方面的),因为它使用了子查询。因此,为了我的目的,一次不重要的练习,这只是基本的什么达到我想要的。如果更有效率的方法能够出现,我将更愿意学习!
CREATE TABLE yourTable (`AI_ID` int, `Employee_Number` int, `Employee_Name` varchar(255));
INSERT INTO yourTable (`AI_ID`, `Employee_Number`, `Employee_Name`)
VALUES
(1, 33400, 'John'),
(2, NULL, 'John''s Wife'),
(3, NULL, 'John''s Child'),
(4, 43443, 'Susan'),
(5, NULL, 'Susan''s Husband');
SELECT *,
(SELECT Employee_Number FROM yourTable innerTable
WHERE innerTable.AI_ID <= outerTable.AI_ID
AND innerTable.Employee_Number IS NOT NULL
ORDER BY innerTable.AI_ID DESC
LIMIT 1) AS Parent_Employee_Number FROM yourTable outerTable
发布于 2017-03-17 08:34:22
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;
发布于 2017-03-17 08:34:48
您可以使用如下查询:
UPDATE Table1 AS t1
JOIN Table1 AS t2 ON t1.EmployeeName LIKE CONCAT(t2.EmployeeName, '%')
SET t1.EmployeeNumber = t2.EmployeeNumber
WHERE t1.EmployeeNumber IS NULL
只要基于EmployeeName
的第一部分,每个子记录正好有一个匹配的父记录,查询就能工作。
Demo here
https://stackoverflow.com/questions/42852513
复制相似问题