SQL根据条件将值从一列复制到另一列
Posted
技术标签:
【中文标题】SQL根据条件将值从一列复制到另一列【英文标题】:SQL copy value from once column to another based on a condition 【发布时间】:2018-08-23 15:33:18 【问题描述】:我的 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 查询来实现这一点?
【问题讨论】:
查看“case when”语句 @Raj 。 . .我不明白这个问题。只需列出您想要的所有列。 【参考方案1】:在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
【讨论】:
我们可以选择 * 来获取表中的所有列作为输出吗?您的 SELECT 语句仅输出 Column1、Column2、Column3 和 Column4。输出中的 Column5 呢? 如果您使用*
,只需添加Column5
,您将拥有2 个Column4
。以上是关于SQL根据条件将值从一列复制到另一列的主要内容,如果未能解决你的问题,请参考以下文章
Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列