Sql server 有人能带我一步一步地解决这个问题吗

Sql server 有人能带我一步一步地解决这个问题吗,sql-server,Sql Server,请有人帮助初学者理解在MS SQL Server中解决此问题的过程。如果你有任何课程,你会推荐,这将是伟大的以及。我吃了一些,但他们没有装备我来解决这个问题。我是初学者。谢谢 基本上,您需要执行某种类型的将数据连接到自身(也称为自连接)的操作,以便能够检查给定条件: x1 = y2 and x2 = y1 我们可以使用以下查询获取所有对: DECLARE @DataSource TABLE ( [x] INT ,[y] INT ); INSERT INTO @DataSourc

请有人帮助初学者理解在MS SQL Server中解决此问题的过程。如果你有任何课程,你会推荐,这将是伟大的以及。我吃了一些,但他们没有装备我来解决这个问题。我是初学者。谢谢


基本上,您需要执行某种类型的将数据连接到自身(也称为自连接)的操作,以便能够检查给定条件:

x1 = y2 and x2 = y1
我们可以使用以下查询获取所有对:

DECLARE @DataSource TABLE
(
    [x] INT
   ,[y] INT
);

INSERT INTO @DataSource ([x], [y])
VALUES (20, 20)
      ,(20, 20)
      ,(20, 21)
      ,(23, 22)
      ,(22, 23)
      ,(21, 20);


WITH DataSource AS
(
    SELECT [x]
          ,[y]
          ,ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS [RowID]
    FROM @DataSource
)
SELECT *
FROM DataSource DS1
INNER JOIN DataSource DS2
    ON DS1.[x] = DS2.[y]
    AND DS1.[y] = DS2.[x]
WHERE DS1.[RowID] <> DS2.[RowID];

有一点零钱。我们正在寻找这一对,欢迎来到StackOverflow!按照措辞,你的问题不适合这个网站。请阅读。这里的好问题确定了一个可以用特定答案解决的特定编程问题。我将从谷歌搜索SQL对称对问题开始。请,我们需要看看您尝试了什么-您尝试的SQL查询,而这段代码可能会回答这个问题,提供有关如何和/或为什么它解决问题的额外上下文将提高答案的长期值。这里我考虑了两种情况:情况1:如果X和Y相等,表中必须至少有2个条目,我在tempa表中考虑了这些情况。情况2:如果x1= y2和y1= x2,例如:1,2和2,1,那么我们只需要考虑1,2,排除2,1。表tempb中考虑了这些情况。最后,我对案例1和案例2进行并集,并按x对结果进行排序。我希望这个解释能让你更容易理解。
SELECT DISTINCT [x]
               ,[y]
FROM @DataSource DS1
WHERE EXISTS
(
    SELECT 1
    FROM @DataSource DS2
    WHERE DS1.[x] = DS2.[y]
        AND DS1.[y] = DS2.[x]
        AND DS1.[X] <= DS2.[x]
)
ORDER BY [x];
SELECT DISTINCT DS1.[x]
               ,DS1.[y]
FROM @DataSource DS1
INNER JOIN @DataSource DS2
    ON DS1.[x] = DS2.[y]
    AND DS1.[y] = DS2.[x]
    AND DS1.[x] <= DS2.[x]
ORDER BY DS1.[x];
/* Case 1: Cases where x=y and have more than one record */
with tempa as
(
    select x,y
    from functions
    where x=y
    group by x,y
    having count(*)>=2
),
/* Case 2: Where x=y and y=x and x<>y */
tempb as
(
  select distinct A_X,A_Y from
    (
        select distinct a.x as A_X,a.y as A_Y, b.y as B_Y,b.x as B_X
        from functions a inner join functions b
        on a.x=b.y and a.y=b.x
    ) 
   where A_X<B_X
)
select * from 
(
    select * from tempa
    union 
    select * from tempb
)
 order by 1;