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.