我的SQL表中有4列:
+--------+----------+---------+--------+-----------+
|Column1 |Column2 |Column3 |Column4 |Column5 |
+--------+----------+---------+--------+-----------+
| 1 | abc | def | | 34654 |
| 2 | def | abc | | 798798 |
+--------+----------+---------+--------+-----------+
目标是检查Column3是否在Column2中,如果匹配,则用Column1的相应值填充Column4。
例如,Column3的“ def”与Column2的“ def”匹配,因此Column4应该为2。
所需的输出:
+--------+----------+---------+--------+-----------+
|Column1 |Column2 |Column3 |Column4 |Column5 |
+--------+----------+---------+--------+-----------+
| 1 | abc | def | 2 | 34654 |
| 2 | def | abc | 1 | 798798 |
+--------+----------+---------+--------+-----------+
我尝试对这样的一张桌子进行联接:
SELECT a.Column1
, a.Column2
, a.Column3
, b.Column1 as Column4 FROM "table" a
LEFT JOIN "table" b on lower(a.Column3) = lower(b.Column2)
当表Column4中已经存在时,这将创建一个新的Column4。我正在对所有表进行UNION ALL,我需要所有列(总共32个)作为输出。
如何使用SQL查询实现这一目标?
答案 0 :(得分:0)
在SELECT
SELECT a.Column1
, a.Column2
, a.Column3
, case when Column2 = Column3
then Column1
else Column4 -- keep same value
end as Column4
, a.Column5
FROM "table" a
在UPDATE
update "table"
set Column4 = case when Column2 = Column3
then Column1
else Column4 -- keep same value
end