【发布时间】:2014-11-01 01:06:23
【问题描述】:
我需要从一个临时表更新一个表。因此,我需要比较并找出哪些行不在要从临时表导入的主表中。 我的表格如下所示,
line_id -> nvarchar(20)
order_no -> nvarchar(20)
line_no ->int
两个表具有相同的字段,但临时表有更多最新记录要带到主表中。我正在使用;
INSERT INTO main_table
SELECT * FROM temp_table t
WHERE t.line_id NOT IN (SELECT line_id FROM main_table)
但条件WHERE t.line_id NOT IN (SELECT line_id FROM main_table) 不会带来任何订单行。
但是当使用order_no 而不是line_id 时,比较就完成了,并且开始出现数字或顺序行。但order_no 不是唯一键,并且该比较不会返回所需的所有行。
如果您能帮助我,那就太好了.. 提前致谢!
【问题讨论】:
-
临时表中是否有不在主表中的 line_id - 请注意,插入仅添加行而不能更新任何内容
-
是的。两个表中都没有主键(不是一个好习惯),但是一个不可索引的列返回结果,而其他列都没有!
-
Mark - 是的,temp 中有超过 1000 行不在 main 中。我使用“更新”这个词的字面意思,而不是技术意义..对此感到抱歉:P
-
如果任何 line_id 为空,Not in 将不起作用 - 而
select 1 where 1 not in (2)起作用,select 1 where 1 not in (2, null)不起作用。
标签: sql sql-server database