我有一个SQL database
,我可以通过SQL tab
中的phpmyadmin
进行访问。
我在相同的table
中有父级和子级数据,我想编写一个脚本,将父级名称附加到子级名称的末尾并更新SQL database
,如下面的示例所示
这是我目前拥有的
这就是我想要的
答案 0 :(得分:0)
您可以尝试将Outer JOIN
与CONCAT
和coalesce
函数一起使用。
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) |
注意
为什么需要outer join
,因为您需要将Parent.Name
放在child.Parent
旁边,并需要显示“父级和子级”行。
答案 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)
感谢您的所有帮助。