Jeśli chodzi tylko o traktowanie (B, A)
jako duplikat (A, B)
i nie obchodzi cię szczególnie, czy zwrócony wiersz będzie (A, B)
lub (B, A)
, możesz zrobić coś takiego:
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;
To znaczy, jeśli BUG_ID
ma większą wartość niż LINKED_BIG_ID
, zapytanie zamienia dwa identyfikatory, w przeciwnym razie wartości są zwracane bez zmian. Dlatego (A, B)
i (B, A)
zawsze twórz zduplikowane wiersze (oba byłyby albo (A, B)
lub (B, A)
) i DISTINCT
upewnia się, że nie ma żadnego w ostatecznym wyniku.