SQL数据库操作-在此数据库示例中,如何将父名称附加到子名称

时间:2018-07-27 13:15:33

标签: mysql sql

我有一个SQL database,我可以通过SQL tab中的phpmyadmin进行访问。

我在相同的table中有父级和子级数据,我想编写一个脚本,将父级名称附加到子级名称的末尾并更新SQL database,如下面的示例所示

这是我目前拥有的 database before

这就是我想要的 database after

3 个答案:

答案 0 :(得分:0)

您可以尝试将Outer JOINCONCATcoalesce函数一起使用。

TestDLL

CREATE TABLE T(
   Type VARCHAR(50),
   ProductNumber INT,
   Name VARCHAR(50),
   Parent INT
);

INSERT INTO T VALUES ('paren', 125000,'Bike',NULL);
INSERT INTO T VALUES ('child', 125001,'Small',125000);
INSERT INTO T VALUES ('child', 125002,'Large',125000);

查询

SELECT c.Type,c.ProductNumber,coalesce(CONCAT(c.Name,' ',p.Name),c.Name) name,c.Parent  
FROM T p RIGHT JOIN T c
ON p.ProductNumber  = c.Parent 

[结果]

|  Type | ProductNumber |       name | Parent |
|-------|---------------|------------|--------|
| child |        125001 | Small Bike | 125000 |
| child |        125002 | Large Bike | 125000 |
| paren |        125000 |       Bike | (null) |

sqlfiddle

注意

为什么需要outer join,因为您需要将Parent.Name放在child.Parent旁边,并需要显示“父级和子级”行。

  1. outer join返回一组记录,其中包括内部联接将返回的记录,但还包括其他行,而在其他表中找不到对应的匹配项。
  2. CONCAT可以将多列值组合为一个字符串。

  3. COALESCE返回多个列中的第一个非空表达式。

Inner Join vs. Outer Join

答案 1 :(得分:0)

SELECT转换为UPDATE

UPDATE T c
LEFT JOIN T p ON p.ProductNumber = c.Parent
SET c.Name = COALESCE(CONCAT(c.Name, ' ' , p.Name), c.Name)

答案 2 :(得分:0)

只是为了向您介绍最终代码,因为它与上述文章略有不同。我需要重新添加and c.Type = 'child'

UPDATE T c
LEFT JOIN T p ON p.ProductNumber = c.Parent and c.Type = 'child'
SET c.Name = COALESCE(CONCAT(c.Name, ' ' , p.Name), c.Name)

感谢您的所有帮助。