Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在有更多列的位置不存在MS SQL_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

在有更多列的位置不存在MS SQL

在有更多列的位置不存在MS SQL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表1,我需要从表1中获取数据,而ad到表2中只有表2中没有的行 Table 1 ID Name N T A Bob 33 Y B Eva 44 N C John 47 Y B Alex 44 N D Bob 47 Y Table 2 ID Name N T A Bob 34 Y B Alex 44 N D Bob 47 Y 我尝试设置这种类型的版本脚本,但我得到了整

我有一个表1,我需要从表1中获取数据,而ad到表2中只有表2中没有的行

Table 1
ID  Name    N   T
A   Bob    33   Y
B   Eva    44   N
C   John   47   Y
B   Alex   44  N
D   Bob    47  Y

Table 2 
ID  Name   N   T
A   Bob    34  Y
B   Alex   44  N
D   Bob    47  Y
我尝试设置这种类型的版本脚本,但我得到了整个表1+新行的重复性

INSERT INTO TABLE_2
  (ID , Name ,  N ,  T)
SELECT table1.ID,  table1.Name,   table1.N,   table1.T
FROM TABLE_1 table1 
WHERE NOT EXISTS(SELECT 1
                 FROM TABLE_2 table2
                 WHERE (table2.ID = table1.ID) and (table2.Name = table1.Name) and (table2.N = table1.N )AND (table2.T =  table1.T))
预期结果

A   Bob    34   Y
B   Alex   44   N
D   Bob    47   Y
A   Bob    33   Y
B   Eva    44   N
C   John   47   Y

一种方法是插入。。。使用SELECT查询进行选择,该查询标识表1中与表2中某些记录不完全匹配的所有记录


请注意,这里的逻辑是,如果表1中给定记录的哪怕一列与表2中的某个记录不一致,那么联接将失败,结果集中的所有表2列都将为空。WHERE子句仅限于表1中的此类不匹配记录。

您可以使用左连接来连接这两个表。 必须插入表_1中与表_2不匹配的所有记录。要检查哪个记录不匹配,只需使用T2.ID为NULL


我已经测试了你的脚本,它可以工作了:谢谢你浪费我的时间阅读。没有它或负号的SQL可以使用左连接习惯用法。
INSERT INTO table2 (ID, Name, N, T)
SELECT t1.ID, t1.Name, t1.N, t1.T
FROM table1 t1
LEFT JOIN table2 t2
    ON t1.ID   = t2.ID   AND
       t1.Name = t2.Name AND
       t1.N    = t2.N    AND
       t1.T    = t2.T
WHERE t2.ID IS NULL
 INSERT INTO TABLE_2 (ID , Name ,  N ,  T)
      SELECT T1.ID
            ,T1.Name
            ,T1.N
            ,T1.T
        FROM TABLE_1 T1 
   LEFT JOIN TABLE_2 T2
          ON T1.ID    = T2.ID
         AND T1.Name  = T2.Name
         AND T1.N     = T2.N
         AND T1.T     = T2.T
       WHERE T2.ID IS NULL
declare @Table1 table (ID varchar(100),  Name varchar(100),   N int,   T varchar(100));
insert into @Table1 values
('A',   'Bob',    33,   'Y'),
('B',   'Eva',    44,   'N'),
('C',   'John',   47,   'Y'),
('B',   'Alex',   44,  'N'),
('D',   'Bob',    47,  'Y')

declare @Table2 table (ID varchar(100),  Name varchar(100),   N int,   T varchar(100));
insert into @Table2 values
('A',   'Bob',    34,   'Y'),
('B',   'Alex',   44,  'N'),
('D',   'Bob',    47,  'Y')

insert into @Table2
select *
from @Table1 t1
where not exists (select * 
                  from @Table2 t2
                  where t2.ID = t1.ID and t2.N= t1.N and t2.Name = t1.Name and t1.T = t2.T);