Estoy tratando de encontrar filas duplicadas basadas en columnas mixtas. Este es un ejemplo de lo que tengo:Comparación de la tabla SQL consigo mismo (autoensamblado)
CREATE TABLE Test
(
id INT PRIMARY KEY,
test1 varchar(124),
test2 varchar(124)
)
INSERT INTO TEST (id, test1, test2) VALUES (1, 'A', 'B')
INSERT INTO TEST (id, test1, test2) VALUES (2, 'B', 'C')
Ahora bien, si me funciono con esta pregunta:
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
que se puede esperar para volver ambos de identificación. (1 y 2), sin embargo, solo vuelvo una vez.
Mis pensamientos serían que debería comparar cada fila, pero supongo que esto no es correcto? Para solucionar este había cambiado de consulta a ser:
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
OR [LEFT].[TEST2] = [RIGHT].[TEST1]
Lo que me da a ambas filas, pero el rendimiento se degrada muy rápidamente basada en el número de filas.
La solución final se me ocurrió para el rendimiento y los resultados era utilizar una unión:
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
UNION
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST2] = [RIGHT].[TEST1]
Pero en general, estoy obviamente falta una comprensión de por qué esto no está funcionando lo que significa que estoy Probablemente haciendo algo mal. ¿Podría alguien señalarme en la dirección correcta?
trate de la primera consulta con estos datos: INSERT INTO TEST (id, test1, test2) VALORES (1, 'C', 'B') VALORES INSERT INTO TEST (id, test1, test2) (2, 'B', 'C') Eso debería darle ambas filas. –