只是为了更新你的最终代码,因为它与上面的帖子略有不同。我需要在后面加上 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)
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) |
3条答案
按热度按时间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)
eh57zj3b2#
转换
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)
sulc1iza3#
你可以试着用
Outer JOIN
与CONCAT
以及coalesce
功能。测试DLL
查询
[结果]:
sqlfiddle公司
笔记
为什么你需要一个
outer join
因为你需要Parent.Name
由child.Parent
需要显示父行和子行。一
outer join
返回一组记录,其中包括内部联接将返回的内容,但也包括在另一个表中找不到对应匹配项的其他行。concat可以将多列值组合为一个字符串。
coalesce返回多列中的第一个非空表达式。
内连接与外连接