我需要将表复制到SQL Server 2008上的新表中。 另外,在新表中添加一个新列。
新列的值取决于新表与另一个表之间的比较结果。
实施例,
表1:
col1 col2 col3
abc 346 6546
hth 549 974
预期表1_new:
col1 col2 col3 col4
abc 346 6546 1
hth 549 974 0
表2:
col1
abc
sfsdf
如果Table2的col1出现在Table1 col1中,则在Table1_new中将col4标记为1,否则标记为0。
代码不起作用
SELECT *,
(
SELECT 1 as col4
FROM Table2 as a
INNER JOIN Table1 as b
on b.col1 = a.col1
SELECT 0 as col4
FROM Table2 as a
INNER JOIN Table1 as b
on b.col1 <> a.col1 # I do not know how to do this !!!
)
INTO table1_new
FROM table1
任何帮助将不胜感激。
答案 0 :(得分:3)
您可以使用外部联接:
SELECT table1.col1, col2, col3,
CASE WHEN table2.col1 IS NULL THEN 0 ELSE 1 END AS col4
INTO table1_new
FROM table1
LEFT OUTER JOIN table2 ON table1.col1 = table2.col1
答案 1 :(得分:2)
您可以通过多种方式完成此操作。以下内容在exists
语句中使用case
子句:
insert into table1_new(col1, col2, col3, col4)
select col1, col2, col3,
(case when exists (select 1 from table2 t2 where t2.col1 = t1.col1)
then 1 else 0
end)
from table1 t1;
您也可以使用left outer join
执行此操作,但如果t2
有重复项,则存在重复的风险。
答案 2 :(得分:0)
INSERT INTO T2
SELECT COL1,COL2,COL3, (COL1+COL2) FROM T1
请注意,您可以运行其他表达式甚至是函数来代替(COL1 + COL2)部分。
答案 3 :(得分:0)
使用CASE
SELECT
CASE
WHEN b.col1 = a.col1 THEN 1
ELSE 0
END as col4
FROM Table1 as a
LEFT JOIN Table2 as b
on b.col1 = a.col1
编辑:Table1
应该是@Muerniks答案中提到的左表。
答案 4 :(得分:0)
除了其他人已经建议的内容之外:如果您无法一步解决问题,请尝试缩小步骤。例如。首先将Table1.col4初始化为零:
INSERT INTO Table1_new (col1,col2,col3,col4)
SELECT col1,col2,col3,0
FROM Table1
之后,您只需要识别Table2中具有匹配伙伴的记录,这是一个经典的内部联接:
UPDATE t1 SET col4=1
FROM Table1_new t1
JOIN Table2 t2 ON t2.col1=t1.col1