SQL'NOT IN'运算符在比较两个表中的列时不会给出预期的结果

时间:2012-07-31 18:39:51

标签: sql sql-server database

我需要从临时表更新表。因此,我需要比较并找出要从临时表导入的主表中没有的行。 我的表格如下,

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不是唯一的密钥,并且该比较不会返回所需的所有行。

如果你能帮助我,那就太好了。提前感谢!

2 个答案:

答案 0 :(得分:2)

Not-in's可以给出奇怪的麻烦。这是对同一个想法的不同看法。

Insert Into main_table
  select t.* 
    from temp_table t
    left outer join main_Table m
      on t.line_id=m.line_id
   where m.line_id is null

答案 1 :(得分:0)

尝试以下方法:

INSERT INTO main_table
  SELECT * FROM temp_table t 
  WHERE LTRIM(RTRIMt.line_id)) NOT IN (SELECT LTRIM(RTRIM(line_id)) FROM main_table)