删除包含两列可能包含相同数据的行

问题描述 投票:0回答:3

鉴于以下数据为例,

Letter One | Letter Two    
         A | B
         B | A
         A | C

我怎样才能选择任何具有相同数据的行,所以在这种情况下我希望输出删除第二行,因为这两个字母是相同的。所以我的输出是:

Letter One | Letter Two
         A | B 
         A | C
sql sql-server tsql
3个回答
1
投票

假设没有确切的重复,你可以这样做:

select letterA, letterB
from t
where letterA <= letterB
union all
select letterA, letterB
from t
where letterA > letterB and
      not exists (select 1 from t t2 where t2.letterA = t.letterB and t2.letterB = t.letterA);

如果您不关心最终列的顺序,您可以:

select distinct (case when letterA <= letterB then letterA else letterB end) as letterA,
       (case when letterA > letterB then letterA else letterB end) as letterB
from t;

1
投票
SELECT 
         l1.LetterOne , l1.LetterTwo
FROM
         letters l1
LEFT JOIN
         letters l2 ON l1.LetterOne = l2.LetterTwo AND l1.LetterTwo = l2.LetterOne
WHERE
         l2.LetterOne IS NULL OR l1.LetterOne < l2.LetterOne

1
投票

UNION将过滤掉重复项。最低值将在第一列中返回:

SELECT LetterOne, LetterTwo
FROM <table>
WHERE LetterOne < LetterTwo
UNION 
SELECT LetterTwo, LetterOne
FROM <table>
WHERE LetterTwo<=LetterOne
© www.soinside.com 2019 - 2024. All rights reserved.