在这个数据库示例中,如何将父名称附加到子名称

y0u0uwnf  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(258)

我有一个 SQL database ,我可以通过 SQL tabphpmyadmin .
我有相同的父数据和子数据 table ,我想编写一个脚本,将父名称附加到子名称的末尾,并更新 SQL database ,如下面的示例所示。
这就是我现在拥有的

这就是我想要的

i7uq4tfw

i7uq4tfw1#

只是为了更新你的最终代码,因为它与上面的帖子略有不同。我需要在后面加上 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)

谢谢你的帮助。
eh57zj3b

eh57zj3b2#

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

sulc1iza

sulc1iza3#

你可以试着用 Outer JOINCONCAT 以及 coalesce 功能。
测试DLL

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.Namechild.Parent 需要显示父行和子行。
outer join 返回一组记录,其中包括内部联接将返回的内容,但也包括在另一个表中找不到对应匹配项的其他行。
concat可以将多列值组合为一个字符串。
coalesce返回多列中的第一个非空表达式。
内连接与外连接

相关问题