We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
- Prepare
- SQL
- Advanced Join
- Symmetric Pairs
- Discussions
Symmetric Pairs
Symmetric Pairs
Sort by
recency
|
1550 Discussions
|
Please Login in order to post a comment
My Cool Solution (Using Sum and Difference):
WITH TMP AS ( SELECT *, ROW_NUMBER() OVER(ORDER BY X, Y ASC) AS ID FROM FUNCTIONS )
SELECT DISTINCT TMP1.X, TMP1.Y FROM TMP TMP1 INNER JOIN TMP TMP2 ON TMP1.ID < TMP2.ID AND (TMP1.X = TMP2.Y AND TMP1.Y = TMP2.X);
SELECT IF(X > Y, Y, X) AS c1, IF(X > Y, X, Y) AS c2 FROM Functions GROUP BY c1, c2 HAVING COUNT(*) > 1 ORDER BY c1 ASC
SET NOCOUNT ON;
/* Enter your query here. Please append a semicolon ";" at the end of the query and enter your query in a single line to avoid error. */
DECLARE @X INT; DECLARE @Y INT; DECLARE @IT INT = 1; DECLARE @IMAXX INT; DECLARE @JMAXX INT; DECLARE @LINE VARCHAR(MAX)=''; DECLARE @COUNT INT =0;
DECLARE @CTE TABLE ( RowNum INT, X INT, Y INT );
-- Populate the table variable INSERT INTO @CTE (RowNum, X, Y) SELECT ROW_NUMBER() OVER (ORDER BY X, Y) AS RowNum, X, Y FROM (SELECT DISTINCT X, Y FROM FUNCTIONS) AS DistinctFunctions; DECLARE @RESULT TABLE( X INT, Y INT )
SELECT @IMAXX=COUNT() FROM @CTE ; SELECT @JMAXX=COUNT() FROM FUNCTIONS;
WHILE @IT <= @IMAXX BEGIN DECLARE @JT INT =1; SELECT @X = X, @Y = Y FROM @CTE WHERE RowNum = @IT; WHILE @JT <= @JMAXX BEGIN IF @X <= @Y BEGIN IF @X=@Y BEGIN SELECT @COUNT=COUNT() FROM FUNCTIONS WHERE X=@Y AND Y=@X; IF @COUNT>=2 BEGIN INSERT INTO @RESULT VALUES(@X, @Y); BREAK; END END ELSE BEGIN SELECT @COUNT=COUNT() FROM FUNCTIONS WHERE X=@Y AND Y=@X; IF @COUNT>=1 BEGIN INSERT INTO @RESULT VALUES(@X, @Y); BREAK; END END END SET @JT+=1; END SET @IT+=1; END SELECT * FROM @RESULT; go