SQL用于更新具有相同表但具有不同条件的行的表

时间:2016-05-04 09:54:16

标签: mysql sql sql-update

我有一张这样的表:

business_positions
id   code   description_1   description_2 

出于某种原因,填充description_1列并且description_2列为空,前半部分填充错误,后半部分则相反:

id  |code|description_1|description_2
 900|   1|Senior Manager|(empty)
 901|   1|President|(empty)
 902|   1|Board Member|(empty)
 903|   2|Another Description|(empty)
...
2000|   1|(empty)|Desc
2001|   1|(empty)|Desc2
2002|   1|(empty)|Desc3
2003|   2|(empty)|Desc4
...

我想更新表,让两个描述都填入同一行,通过code字段匹配行并遵守插入顺序(即没有排序)。 ids始终是唯一的。我追求的结果是:

id  |code|description_1|description_2
 900|   1|Senior Manager|Desc
 901|   1|President|Desc2
 902|   1|Board Member|Desc3
 903|   2|Another Description|Desc4

然后删除后半部分,使用2000年的ID。

我该怎么做?

试着没有运气:

UPDATE 
    business_positions A
LEFT JOIN business_positions B ON (A.code=B.code )
SET
    A.description_2 = B.description_2
WHERE
    A.description_2=''
AND
    B.description_2<>'' 
AND 
    A.id<>B.id

2 个答案:

答案 0 :(得分:1)

使用以下查询进行更新

update business_positions t1 inner join business_positions t2
on t2.id=t1.id+1100
 set t1.description_2=t2.description_2

然后使用以下查询删除不需要的行

delete from business_positions where id>1999;

答案 1 :(得分:0)

试试这个

;with CTE  
AS  
(  
    select description_2 from business_positions where description_1 = " "  
)  

update A  
Set description_2 = B.description_2  
FROM business_positions A  
INNER JOIN CTE B  
ON A.description_2 = " "  

DELETE business_positions  
where description_1 = " "  


select * From business_positions