删除同一个表sql的两列的重复记录

时间:2015-08-11 15:54:03

标签: sql-server duplicate-removal

我有一张如下表所示的表格:

ID    OrderId   IssueId EmployeeId
1      123        123    12098
2      124        123    12098
3      125        123    12098
4      123        124    12098
5      124        124    12098
6      125        124    12098
7      123        126    12098
8      124        126    12098
9      125        126    12098

针对每个OrderId,为IssueId插入了记录。现在我想过滤哪个IssueId与OrderId不匹配。

即上面的示例数据orderId 125,但是issueId 126.我只需要从表中过滤掉这些数据。

我正在使用以下查询

Select OrderId,IssueId,EmployeeId from IssuesTable where OrderId != IssueId

我得到以下结果。

OrderId   IssueId EmployeeId
123        126    12098
124        126    12098
125        126    12098

由于每个订单ID都有一个问题,因此缺少issueId会得到3个。

任何人都可以帮助我解决这个问题。 ??

2 个答案:

答案 0 :(得分:0)

尝试此查询:

SELECT *
FROM <table>
WHERE OrderId = IssueId

以下示例SQLFiddle显示了如何仅返回具有相同OrderIdIssueId的行。

答案 1 :(得分:0)

如果您想在任何一行中找到与orderid不匹配的Issueid,请尝试此操作

select orderid 
from yourtable
group by orderid
having count(case when orderid = IssueId then 1 end) = 0 

如果您想选择IssueId以及OrderId,请使用此

SELECT OrderId,IssueId 
FROM   Yourtable A 
WHERE  EXISTS (SELECT 1 
               FROM   Yourtable B 
               WHERE  a.orderid = b.orderid 
               GROUP  BY orderid 
               HAVING Count(CASE WHEN orderid = issueid THEN 1 END) = 0)