比较两个表中的列时,SQL“NOT IN”运算符未给出预期结果

比较两个表中的列时,SQL“NOT IN”运算符未给出预期结果,sql,sql-server,database,Sql,Sql Server,Database,我需要从临时表更新表。因此,我需要比较并找出哪些行不在要从temp表导入的主表中。 我的桌子如下所示 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 lin

我需要从临时表更新表。因此,我需要比较并找出哪些行不在要从temp表导入的主表中。 我的桌子如下所示

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)
但是t.line\u id不在主表的SELECT line\u id中的情况不会带来任何订单行。 但是,当使用订单号而不是行id时,比较就完成了,一个数字或订单行开始显示。但是order_no不是唯一的键,并且该比较不会返回所需的所有行


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

不在家的人可能会遇到奇怪的麻烦。这是一个不同的想法

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
请尝试以下操作:

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

临时表中是否有不在主表中的行id?请注意,insert只添加行,不能更新任何内容是的,是的。这两个表中都没有主键这不是一个很好的做法,但是一个不可索引的列会在其他列都不可索引的情况下返回结果!标记-是的,temp中有1000多条线不在main中。我用“更新”这个词是字面意思,而不是技术意义。。对此很抱歉:如果任何行的id为空,PNot in将不起作用-选择1,其中1不在2中起作用,选择1,其中1不在2中,null不起作用。我尝试了此操作,但没有成功!我很困惑,无法解释发生了什么。太棒了!很高兴我能帮助你!祝福!