我需要将数据插入到具有串联的表中,具体取决于其中一列的值。 E.g。
表A :
+-------+-----------+-----------+
| rowid | objectIdA | objectIdB |
+-------+-----------+-----------+
| 1 | 1 | 2 |
| 2 | 1 | null |
| 3 | 2 | 4 |
| 4 | 5 | null |
+-------+-----------+-----------+
会导致表B :
+-------+-----------+
| rowid | concatCol |
+-------+-----------+
| 1 | 1_2 |
| 2 | 1 |
| 3 | 2_4 |
| 4 | 5 |
+-------+-----------+
因此,如果其中一列不为空,则基本上与下划线连接。
答案 0 :(得分:2)
怎么样?
INSERT INTO tableB(rowid, concatCol)
SELECT
rowid,
objectIdA + CASE WHEN objectIDB IS NULL THEN '' ELSE '_' + objectIDB END
FROM
TableA
答案 1 :(得分:0)
取决于您的数据库系统和编程语言。纯SQL解决方案可能会非常难看(特别是如果您需要支持更新和插入)。
INSERT INTO tableB(rowid, concatCol)
(SELECT rowid, objectIdA+'_'+objectIDB FROM tableA)
如果+是串联操作(Oracle使用||
我认为)并且第二个表是空的(并且如果rowid实际上是可插入的),则会工作。如果列可以为空,则可以使用CASE
的RDBMS函数来区分需要添加第二行和分隔符的情况,或者跳过这两种情况。
答案 2 :(得分:0)
尝试, 假设您的列是整数数据类型
select rowid,cast(objectIdA as varchar(10)) + case when objectIdB is null then '' else '_'+
cast(objectIdB as varchar(10)) end
from tab1