如何排除具有相同值的某些(不是全部)记录

时间:2016-03-08 05:53:57

标签: sql sql-server

在查询表A使用第一个查询后,我有这些记录:

pID  cID   code
1     1     A 
1     1     B 
1     1     B 
1     1     B 

在使用第二个查询查询表B之后,我有一条记录:

pID   cID   code
1     1     B 
1     1     B 

我希望表A排除表B的记录。结果是:

pID   cID   code
1     1     A
1     1     A

我该怎么做?希望你能帮助我。谢谢。
正在更新...
很抱歉让你混淆的例子 如果我从第二张表中得到这些记录:

pID   cID   code
1     1     B 

然后我想要的结果是(排除一条记录):

pID  cID   code
1     1     A 
1     1     B 
1     1     B 

4 个答案:

答案 0 :(得分:0)

只需使用EXCEPT。您的所需输出错误,因为1 B也是TableB的相同记录

SELECT * FROM TABLE_A
EXCEPT
SELECT * FROM TABLE_B

请参阅此Link

如果你的情况不是全部,那么一些。

只需使用DISTINCT

即可

根据问题的更新(根据我的理解)

 SELECT DISTINCT * FROM TABLE_A
 UNION ALL
 SELECT * FROM TABLE_B

答案 1 :(得分:0)

您在查询中尝试 GROUP BY 功能 例如:

select pID,cID,code  from table group by code

答案 2 :(得分:0)

使用EXCEPT和row_number()生成唯一的no

;with cte1 as
(
    select  *, rn = row_number() over (partition by pID, cID, code order by pID, cID, code)
    from    query1
),
cte2 as
(
    select  *, rn = row_number() over (partition by pID, cID, code order by pID, cID, code)
    from    query2
)
select  *
from    cte1
except
select  *
from    cte2

答案 3 :(得分:0)

基于您的问题,我认为您要删除B中的记录,这些记录在A中出现不止一次:

首先从A中选择B中不存在的所有记录,然后将它们与A和B中的1个不同记录合并:

select * from A
except 
select * from B

union all

select distinct *
from
  (select a.pid, a.cid, a.code
   from 
   A
   inner join 
   B
   on a.pid=b.pid and a.cid=b.cid and a.code=b.code)