Si se trata simplemente de tratar (B, A)
como un duplicado de (A, B)
y no le importa particularmente si la fila devuelta será (A, B)
o (B, A)
, podrías hacer algo como esto:
SELECT DISTINCT
CASE WHEN BUG_ID > LINKED_BUG_ID THEN LINKED_BUG_ID ELSE BUG_ID AS BUG_ID,
CASE WHEN BUG_ID > LINKED_BUG_ID THEN BUG_ID ELSE LINKED_BUG_ID AS LINKED_BUG_ID
FROM MY_BUG_LINKS;
Es decir, si BUG_ID
tiene un valor mayor que LINKED_BIG_ID
, la consulta intercambia los dos ID; de lo contrario, los valores se devuelven sin cambios. Por lo tanto, (A, B)
y (B, A)
siempre produce filas duplicadas (ambas serían (A, B)
o (B, A)
), y DISTINCT
se asegura de que no haya ninguno en el resultado final.