[SOLVED] konkatenacja i duplikaty rekordów

Użytkowanie programu bazodanowego
Awatar użytkownika
czp
Posty: 47
Rejestracja: czw mar 04, 2010 5:38 pm

[SOLVED] konkatenacja i duplikaty rekordów

Post autor: czp »

Witam.

Używam relacyjnej bazy MySQL wersja 5.1.5 oraz jako frontega bazy pakietu LibreOffice wersja 3.3.0.
Napotkałem na problem przy tworzeniu do bazy zapytania z podwójną konkatenacją, gdzie po sobie występują co najmniej dwa zapytania z konkatenacją do różnych tabel bazy - wówczas w tak otrzymanym wyniku powielają mi się i powstają duplikaty niektórych połączonych tak pól i rekordów.
Problem polega na tym, że nie wiem jak zlikwidować te duplikaty lub jak zmienić zapytanie aby nie powstawały .??????

Podaję kod zapytania:

Kod: Zaznacz cały


SELECT distinct
`dane`.`id_dane`,

GROUP_CONCAT(CONCAT_WS('  ', CONVERT(`dane_obieg`.`data`, CHAR(10)),`dane_obieg`.`obieg`, ' | ') SEPARATOR '\n') AS `data i obieg`,

GROUP_CONCAT(CONCAT_WS('  ', CONVERT(`dane_koniec`.`data_zakonczenia`, CHAR(10)),`lista_wynik`.`wynik_symbol`, ' | ') SEPARATOR '\n') AS `data i wynik `

FROM 
{ OJ `rsd_wk`.`dane` AS `dane` 
LEFT OUTER JOIN `rsd_wk`.`dane_obieg` AS `dane_obieg` ON `dane`.`id_dane` = `dane_obieg`.`fk_id_dane`
LEFT OUTER JOIN `rsd_wk`.`dane_koniec` AS `dane_koniec` ON `dane`.`id_dane` = `dane_koniec`.`fk_id_dane`
LEFT OUTER JOIN `rsd_wk`.`lista_wynik` AS `lista_wynik` ON `dane_koniec`.`fk_id_lista_wynik` = `lista_wynik`.`id_lista_wynik`}

GROUP BY `id_dane`;

poniżej podaję link do obrazu przedstawiającego zapytanie kwerendy oraz wynik zapytania:

http://czp.pl/baza/obraz.jpg

Np. w rekordzie nr 2 w polu `data i obieg` widzimy 3 połączone (takie same) rekordy a powinien być jeden. Dopóki w takich zapytaniach nie było drugiej konkatenacji czyli wyniku w polu `data i wynik` to problem ten nie występował.
Ostatnio zmieniony wt lis 23, 2010 11:12 pm przez quest-88, łącznie zmieniany 2 razy.
Powód: [solved]
Windows 7 i openoffice 3.2
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: konkatenacja i duplikaty rekordów

Post autor: Jan_J »

Dlaczego pytasz o to na forum OpenOffice'a? Czyżby inne klienty -- np. konsola MySQL -- przedstawiały odpowiedź pozbawioną tego błędu? Nie sądzę; lepiej sprawdź.
W sprawie samego zapytania: być może ktoś tutaj też Ci pomoże, ale pewniej będzie poszukać na forach użytkowników MySQL. Ja sam nie znam dobrze dialektu MySQL-a, i bez wgłębiania się rozumiem z niego mniej więcej tyle, co po kaszubsku.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
czp
Posty: 47
Rejestracja: czw mar 04, 2010 5:38 pm

Re: konkatenacja i duplikaty rekordów

Post autor: czp »

Dlatego na tym forum też,
bo jako klienta jedynie używam openoffice - tam są formularze do wprowadzania danych , raporty, itp, itd.
Może ktoś wpadnie na jakiś pomysł.

pozdrawiam

ps. sprawdziłem z ciekawości w konsoli MySQL Query Browser-a . ale efekt jest ten sam.
Windows 7 i openoffice 3.2
Awatar użytkownika
czp
Posty: 47
Rejestracja: czw mar 04, 2010 5:38 pm

Re: konkatenacja i duplikaty rekordów

Post autor: czp »

Dalej męczę ten temat ale bez zadowalających efektów.

Zauważyłem jednak, że jak podzielę to zapytanie i utworzę dwie kwerendy, z których w jednej utworzę zapytanie z podwójną konkatenacją do tabeli `dane_obieg`, a w drugiej zapytanie z podwójną konkatenacją do tabeli `dane_koniec` to obie osobno działają bez zarzutu. Gdy teraz utworzę trzecia kwerendę i połączę dwie pierwsze kwerendy złączeniem wewnętrznym to otrzymany wynik jest całkowicie poprawny i nie mam powielonych duplikatów żadnych rekordów.

Sposób ten jednak nie odpowiada mi bo tak naprawdę w tym jednym zapytaniu chcę się odnieść do około 10 tabel z podwójną konkatenacją i rozbijanie jednego zapytania na wiele kwerend po prostu zagmatwa całość.

Potrzebuję więc jednego zapytania ale niestety robię w nim gdzieś błąd skoro powielają się rekordy przy złączeniach z podwójną konkatenacją.
Windows 7 i openoffice 3.2
Awatar użytkownika
czp
Posty: 47
Rejestracja: czw mar 04, 2010 5:38 pm

Re: konkatenacja i duplikaty rekordów

Post autor: czp »

Witam.

Problem już rozwiązany dzieki "wookieb" z forum php.pl

prawidłowe zapytanie wygląda tak:

Kod: Zaznacz cały

SELECT 
`dane`.`id_dane`,

GROUP_CONCAT(DISTINCT CONCAT_WS('  ', CONVERT(`dane_obieg`.`data`, CHAR(10)),`dane_obieg`.`obieg`, ' | ') SEPARATOR '\n') AS `data i obieg`,
GROUP_CONCAT(DISTINCT CONCAT_WS('  ', CONVERT(`dane_koniec`.`data_zakonczenia`, CHAR(10)),`lista_wynik`.`wynik_symbol`,  ' | ') SEPARATOR '\n') AS `data i  wynik`


FROM 
{ OJ `rsd_wk`.`dane` AS `dane` 

LEFT OUTER JOIN `rsd_wk`.`dane_obieg` AS `dane_obieg` ON `dane`.`id_dane` = `dane_obieg`.`fk_id_dane`
LEFT OUTER JOIN `rsd_wk`.`dane_koniec` AS `dane_koniec` ON `dane`.`id_dane` = `dane_koniec`.`fk_id_dane`
LEFT OUTER JOIN `rsd_wk`.`lista_wynik` AS `lista_wynik` ON `dane_koniec`.`fk_id_lista_wynik` = `lista_wynik`.`id_lista_wynik`}


GROUP BY `id_dane`;
Windows 7 i openoffice 3.2
ODPOWIEDZ