插入除sql server之外的记录

时间:2017-12-21 10:34:43

标签: sql-server sql-server-2008 sql-server-2016

我有两个表t1和t2。       t1有10k记录,t2有2k记录。 t2的2k记录存在于t1中。       我想要来自t1的8k不同记录,这在t2中不存在。

我按照以下方式执行此操作:

select id, second_telphon from t1
except 
select id, second_telphon from t2

但是,我仍然获得所有10k记录。是"除了"关键字不起作用?

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以执行加入以从表中获取唯一数据。

像表t1&表格一样t2你可以执行左或右连接。

示例:

SELECT T1.*
    FROM T1
    WHERE NOT EXISTS(SELECT NULL
                         FROM T2
                         WHERE T1.ID = T2.ID 
                             AND T1.Date = T2.Date
                             AND T1.Hour = T2.Hour)


OR .


SELECT T1.*
    FROM T1
        LEFT JOIN T2
            ON T1.ID = T2.ID
                AND T1.Date = T2.Date
                AND T1.Hour = T2.Hour
    WHERE T2.ID IS NULL

答案 1 :(得分:0)

试试这个:

volatile

如果ID是唯一值,请同时尝试:

SELECT * 
FROM T1
WHERE NOT EXISTS(SELECT id,second_telphon FROM t2)

答案 2 :(得分:0)

您可以尝试使用union,然后使用聚合来限制第一个表中那些未被第二个表复制的记录:

SELECT id, second_telphon
FROM
(
    SELECT id, second_telphon FROM t1
    UNION ALL
    SELECT id, second_telphon FROM t2
) t
GROUP BY id, second_telphon
HAVING COUNT(*) = 1;

如果记录(被定义为idsecond_telphon对在联合后只有一个记录计数,则表示该记录对于第一个表是唯一的。

答案 3 :(得分:0)

只做左连接

    select t1.id,t1.second_telphon  from t1 
       left  join  t2 on 
       t1.id  = t2.id  
      and  t1.second_telphon =t2.second_telphon
   where t2.id   is null