首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中为子行选择父行单元格值

在MySQL中为子行选择父行单元格值
EN

Stack Overflow用户
提问于 2017-03-17 08:23:48
回答 4查看 2.1K关注 0票数 3

我正在从Excel表中导入数据,而且我的表中有一个带有父行和子行的表。子行与父行的列大致相同,但A列中的子行为null,这是父行的主键,子行的外键将为子行。

样本数据

代码语言:javascript
运行
复制
 - 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雇员号。

这样员工编号列就会变成这样

代码语言:javascript
运行
复制
 - 33400
 - 33400
 - 33400
 - 43443
 - 43443

注释: Update --这是一个真实的场景,因此不需要父行的任何字段来标识它的子行。不幸的是,上面的表格暗示着employee name正在这么做。

实际上是标识子父行依赖关系的AI ID列。当所有行都由employer number NOT NULL排序时,每个子行都属于它上面的第一行,并带有AI ID。因此,理想情况下,我正在查看一个执行以下操作的查询:

代码语言:javascript
运行
复制
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

上面的那类东西。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-17 12:00:43

这里的演示:http://rextester.com/FDJYO55558

已经完成了以下操作,但我并不意味着它在任何方面都是有效的(资源方面的),因为它使用了子查询。因此,为了我的目的,一次不重要的练习,这只是基本的什么达到我想要的。如果更有效率的方法能够出现,我将更愿意学习!

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-03-17 08:34:22

代码语言:javascript
运行
复制
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的答案,我想知道你是否真的想更新你的桌子。如果是这样的话,我的查询可以稍微修改为:

代码语言:javascript
运行
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2017-03-17 08:34:48

您可以使用如下查询:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42852513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档