Full Outer Join w MySQL 5.7, w prostych słowach? |
Full Outer Join w MySQL 5.7, w prostych słowach? |
21.02.2017, 08:13:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.04.2009 Ostrzeżenie: (0%) |
Witam,
mam pytanie, czy ktoś mógłby w miarę prosty sposób podać zapytanie dla MySQL 5.7 - połączenie tabel m01, m02, ... m12 (czyli miesiące) po kolumnie "nazwa" (tytuł kolumny jednakowy we wszystkich tabelach). Po dogłębnej lekturze wiem, że chciałbym aby było to łączenie FULL OUTER JOIN (czyli wszystko, bez względu na to czy wartość występuje po lewej, czy po prawej). Niestety nie udało mi znaleźć "prostej" formuły, manual wspomina o tym, ale w taki sposób, że nie jestem w stanie tego zdekodować. Z góry dziękuję za pomoc. |
|
|
21.02.2017, 08:43:13
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Złączyć do czego?
|
|
|
21.02.2017, 09:55:00
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.04.2009 Ostrzeżenie: (0%) |
Wyświetlić obecnie korzystam z takiego zapytania, które jest niemal ok, tylko właśnie ogranicza wyniki do wartości z m01. A w m02 i kolejnych miesiącach pojawiały się nowe wartości, które również chciałbym żeby były wyświetlone.
|
|
|
21.02.2017, 10:01:08
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 432 Pomógł: 6289 Dołączył: 27.12.2004 |
Alc, ta struktura bazy wyglada jakby byla mocno niedopracowana
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.02.2017, 10:11:20
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.04.2009 Ostrzeżenie: (0%) |
Nazwijmy to bardzo tymczasowa baza, stworzona na potrzeby analizy prostych danych. Nie jest to element strony czy czegokolwiek "dynamicznego". Wrzucone, przemielone, trochę uporządkowane, przeanalizowane i drop
|
|
|
21.02.2017, 10:26:12
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
MYSQL nie wspiera full outer join. Moźna to jednak obejść za pomocą "UNION":
select ... left join ... UNION ALL select .. right join ... |
|
|
21.02.2017, 10:43:32
Post
#7
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.04.2009 Ostrzeżenie: (0%) |
Ogromne dzięki, widziałem gdzieś ten sposób z UNION, ale nie skumałem... więc jeszcze tylko doprecyzuję: najpierw wszystkie (m01 ... m12) tabele z instrukcją LEFT JOIN ... ON i następnie UNION ALL i wszystkie tabele z instrukcją RIGHT JOIN ?
EDIT: Należy użyć samo UNION, ponieważ UNION ALL powoduje duplikację wpisów. Samo UNION usuwa zduplikowane wpisy. Jest jeszcze problem z wpisami, które pojawiły się np. w m03, ale nie ma ich już w m04 Ten post edytował bugas 21.02.2017, 11:51:30 |
|
|
21.02.2017, 17:59:05
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
Samo UNION usuwa duplikaty wszędzie. Czyli jeśli w tabeli m12 pojawią ci się dwa takie same rekordy na wyjściu, to w wyniku dostaniesz tylko jeden. Można się nieźle zdziwić.
|
|
|
21.02.2017, 18:19:32
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Jak dla mnie to z du... są te tabele...
Weź jak człowiek wpakuj wszystko w 1 tabelę dodaj kolumnę `miesiac` i tam trzymaj nr. miesiąca. |
|
|
22.02.2017, 08:59:11
Post
#10
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.04.2009 Ostrzeżenie: (0%) |
@mmmmmmm
jako, że "nazwa" jest unikalna to nie powinny pojawić się dwa takie same rekordy w jednej tabeli, nawet wynikowej (chyba, że źle Cię zrozumiałem) @Pyton_000 Można by, ale później trzeba by było zrobić strone php żeby to wyświetlać tak jak potrzebuje. Albo zrobić cały skrypt wpisujący/edytujący odpowiednio dane do bazy. Kupa roboty z przewagą kupy |
|
|
22.02.2017, 10:39:56
Post
#11
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
@bugas twój dom twoje kredki... Tylko nie płacz potem że masz kolejne problemy.
|
|
|
Wersja Lo-Fi | Aktualny czas: 19.03.2024 - 11:57 |