[MySQL] Nietypowe złaczenie dwóch tabel

0

Witam!

Stoję przed następującym zadaniem - potrzebuję dwukrotnie złączenia dwóch tabel (załóżmy, tabela1 i tabela2), jednak za każdym razem złączenie ma się odbywać na podstawie innej kolumny. Jako że wyniki obu tych, różnych złączeń mają być w aplikacji wyświetlane razem, zastanawiam się czy da się to zrobić jednym zapytaniem? Oczywiście można to zrobić dwoma zapytaniami, zbuforować w aplikacji wyniki każdego z nich i (również w aplikacji) je złączyć, posortować i wyświetlić razem. Na pewno bardziej elegancko i wydajnie będzie jednak zrobić to w bazie, nie jestem jednak w stanie skonstruować odpowiedniego zapytania.

Skonstruowałem na razie następujący prototyp, z założenia błędny, ilustrujący tylko o co mi chodzi:

SELECT * FROM (SELECT a, b, c FROM tabela1 JOIN tabela2 ON kolumna1 WHERE [...]) AS FIRST, (SELECT a, b, c FROM tabela1 JOIN tabela2 ON kolumna2 WHERE [...])

Oczywiście nie uzyskuję tego, co chciałem, czyli tabeli o następującej strukturze:

+-----+-----+-----+
|  a  |  b  |  c  |
+-----+-----+-----+
| ... | ... | ... |
+-----+-----+-----+

zawierającej "wymieszane" wyniki obu złączeń, a jedynie coś takiego:

+-----+-----+-----+-----+-----+-----+
|  a  |  b  |  c  |  a  |  b  |  c  |
+-----+-----+-----+-----+-----+-----+
| ... | ... | ... | ... | ... | ... |
+-----+-----+-----+-----+-----+-----+

Oczywiście wiem dlaczego otrzymany wynik wygląda tak a nie inaczej (jest to iloczyn kartezjański), ale jak uzyskać ten pożądany?

Baza to najnowsze MySQL.

--
Z góry dziękuję za odpowiedź :)
Maciek

0

Co ty dokładnie chcesz zrobic? Bo ja zrozumiałem to tak:
chcesz złaczyć ze sobą tabele po kolumnie A
złączyć je ze sobą po kolumnie B
złączyć te dwa powyższe zlączenia po kolumnie C
?
Jeśli nie to napisz wyraźnie o co ci chodzi bo "dwukrotnie złączenia dwóch tabel" jest malo precyzyjne
Jesli o to ci chodziło co napisałem to takie coś chyba powinno zadziałać:

select *
from tabela1 as t1 inner join tabela2 as t2 on t1.a = t2.a
inner join tabela1 as t3 on t1.c = t3.c
inner join tabela2 as t4 on t3.b = t4.b

0

Chcę zrobić coś następującego:

  1. Złączyć dwie tabele po kolumnie X

  2. Złączyć te same tabele po kolumnie Y

  3. Wyniki obu tych oddzielnych złączeń otrzymać jako jeden zbiór wierszy.

0

UNION bądź UNION ALL

0

jw.
select * from tabela as t1 inner join tabela as t2 on t1.X = t2.X
union
select * from tabela as t3 inner join tabela as t4 on t3.Y = t4.Y

0

OK, dokładnie o to chodziło! Dzięki :) [soczek]

1 użytkowników online, w tym zalogowanych: 0, gości: 1