У меня есть таблица связанных транзакций, похожая на следующую таблицу
+----+----+----+
| # | A | B |
+----+----+----+
| 1 | 1 | 4 |
| 2 | 3 | 5 |
| 3 | 4 | 6 |
| 4 | 5 | 8 |
| 5 | 6 | 1 |
| 6 | 7 | 7 |
| 7 | 8 | 3 |
| 8 | 9 | 3 |
| 9 | 10 | 4 |
| 10 | 11 | 14 |
| 11 | 2 | 2 |
| 12 | 12 | 4 |
| 13 | 13 | 14 |
| 14 | 14 | 9 |
| 15 | 15 | 1 |
+----+----+----+
Числа в столбцах A и B представляют идентификаторы транзакций. Так, например, транзакция 1 связана с транзакцией 4 по некоторым критериям, транзакция 3 с транзакцией 5, транзакция 4 с транзакцией 6 и так далее.
Транзакции 2 и 7 не связаны ни с какой другой транзакцией, поэтому они являются самосвязанными.
То, что я хочу извлечь, - это семейства транзакций из этой таблицы. Поскольку tran 1 и 4 связаны, tran 4 и 6 связаны, tran 10 и 4 связаны и т. д., они входят в одно семейство транзакций - (1,4,6,10, 12,15).
Я хочу создать семейства транзакций с самым низким идентификатором транзакции, являющимся основной транзакцией. Так что в идеале вывод будет выглядеть так
+----+------+--------------+
| # | Tran | Master_tran |
+----+------+--------------+
| 1 | 1 | 1 |
| 2 | 3 | 3 |
| 3 | 4 | 1 |
| 4 | 5 | 3 |
| 5 | 6 | 1 |
| 6 | 7 | 7 |
| 7 | 8 | 3 |
| 8 | 9 | 3 |
| 9 | 10 | 1 |
| 10 | 11 | 3 |
| 11 | 2 | 2 |
| 12 | 12 | 1 |
| 13 | 13 | 3 |
| 14 | 14 | 3 |
| 15 | 15 | 1 |
+----+------+----+
Я играл с самостоятельными соединениями.
SELECT t1.a as x,
least (min(t1.b), min(t2.a)) as y
FROM test t1
LEFT JOIN test t2 on t2.b = t1.a
GROUP BY t1.a
ORDER BY t1.a asc
Этот код дает следующий вывод
+------+----+---+
| Col1 | X | Y |
+------+----+---+
| 1 | 1 | 4 |
| 2 | 2 | 2 |
| 3 | 3 | 5 |
| 4 | 4 | 1 |
| 5 | 5 | 3 |
| 6 | 6 | 1 |
| 7 | 7 | 7 |
| 8 | 8 | 3 |
| 9 | 9 | 3 |
| 10 | 10 | |
| 11 | 11 | |
| 12 | 12 | |
| 13 | 13 | |
| 14 | 14 | 9 |
| 15 | 15 | |
+------+----+---+
Я не уверен, что не так в моем коде. Может ли кто-нибудь указать мне в правильном направлении? Спасибо!