Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql 删除包含可能包含相同数据的两列的行_Sql_Sql Server_Tsql - Fatal编程技术网

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

Sql 删除包含可能包含相同数据的两列的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,以以下数据为例 Letter One | Letter Two A | B B | A A | C 如何只选择具有相同数据的任何行,因此在本例中,我希望输出删除第二行,因为这两个字母是相同的。 所以我的输出是: Letter One | Letter Two A | B A | C 假设没有精确的副本,您可以执行以下操作: select letterA, letterB from t wher

以以下数据为例

Letter One | Letter Two    
         A | B
         B | A
         A | C
如何只选择具有相同数据的任何行,因此在本例中,我希望输出删除第二行,因为这两个字母是相同的。 所以我的输出是:

Letter One | Letter Two
         A | B 
         A | C

假设没有精确的副本,您可以执行以下操作:

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;
如果不关心最后一列的顺序,可以执行以下操作:

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;

假设没有精确的副本,您可以执行以下操作:

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;
如果不关心最后一列的顺序,可以执行以下操作:

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;

工会将过滤掉重复的。 最低值将在第一列中返回:

SELECT LetterOne, LetterTwo
FROM <table>
WHERE LetterOne < LetterTwo
UNION 
SELECT LetterTwo, LetterOne
FROM <table>
WHERE LetterTwo<=LetterOne

工会将过滤掉重复的。 最低值将在第一列中返回:

SELECT LetterOne, LetterTwo
FROM <table>
WHERE LetterOne < LetterTwo
UNION 
SELECT LetterTwo, LetterOne
FROM <table>
WHERE LetterTwo<=LetterOne

到目前为止你试过什么?发布您的查询,以便我们可以帮助您。@WEI_DBA编辑!您要选择还是删除?@jarlh已选择是否可以按相同顺序复制数据?比如两行,其中LetterOne=A和LetterTwo=b,到目前为止你试过什么?发布您的查询,以便我们可以帮助您。@WEI_DBA编辑!您要选择还是删除?@jarlh已选择是否可以按相同顺序复制数据?就像两行的LetterOne=A和LetterTwo=BGreat一样,我用了你的第二个答案,它成功了。你能解释一下它是如何工作的吗?或者给我指出一个资源的方向吗?太好了,我用了你的第二个答案,它工作了。你能解释一下它是如何工作的吗?或者让我看一下资源的方向吗?这只适用于选择包含双硅酸盐的行,但不包括a | C行这不包括包含D的行这只适用于选择包含双硅酸盐的行,但不包括a | C行这不包括包含D | a的行