Thread View: pl.comp.bazy-danych
12 messages
12 total messages
Started by Roman Tyczka
Fri, 08 Jun 2018 09:01
Wiersze, których nie ma...
Author: Roman Tyczka
Date: Fri, 08 Jun 2018 09:01
Date: Fri, 08 Jun 2018 09:01
25 lines
1476 bytes
1476 bytes
Witam, niby prosta rzecz, ale jakoś koślawo mi to idzie... Mam 3 tabele: OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) MEDAL (IDMEDALU, NAZWA) OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś medal wraz z datą otrzymania. I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). Jak to najzgrabniej zrobić? serwer MariaDB -- pozdrawiam Roman Tyczka
Re: Wiersze, których nie ma...
Author: Stokrotka
Date: Fri, 08 Jun 2018 10:20
Date: Fri, 08 Jun 2018 10:20
24 lines
2082 bytes
2082 bytes
> niby prosta rzecz, ale jakoś koślawo mi to idzie... > > Mam 3 tabele: > OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) > MEDAL (IDMEDALU, NAZWA) > OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) > > W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. > W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś > medal wraz z datą otrzymania. > > I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę > wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, > gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). > > Jak to najzgrabniej zrobić? A jaki to ma związek z tytułem? -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl )
Re: Wiersze, których nie ma...
Author: Roman Tyczka
Date: Fri, 08 Jun 2018 11:34
Date: Fri, 08 Jun 2018 11:34
26 lines
1850 bytes
1850 bytes
On Fri, 8 Jun 2018 12:20:05 +0200, Stokrotka wrote: >> niby prosta rzecz, ale jakoś koślawo mi to idzie... >> >> Mam 3 tabele: >> OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) >> MEDAL (IDMEDALU, NAZWA) >> OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) >> >> W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. >> W tabeli OSOBA_MEDAL [mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś >> medal] wraz z datą otrzymania. >> >> I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę >> wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, >> [gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL) ]. >> >> Jak to najzgrabniej zrobić? > > A jaki to ma związek z tytułem? Zaznaczyłem kwadratowymi nawiasami w powyższym cytacie... -- pozdrawiam Roman Tyczka
Re: Wiersze, których nie ma...
Author: Jan Drawski
Date: Fri, 08 Jun 2018 11:57
Date: Fri, 08 Jun 2018 11:57
31 lines
1913 bytes
1913 bytes
W dniu 2018-06-08 o 11:01, Roman Tyczka pisze: > Witam, > > niby prosta rzecz, ale jakoś koślawo mi to idzie... > > Mam 3 tabele: > OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) > MEDAL (IDMEDALU, NAZWA) > OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) > > W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. > W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś > medal wraz z datą otrzymania. > > I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę > wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, > gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). > > Jak to najzgrabniej zrobić? > > > serwer MariaDB O ile cię dobrze zrozumiałem to zrobił bym to na zasadzie: SELECT * FROM MEDAL LEFT JOIN OSOBA_MEDAL ON MEDAL.IDMEDALU = OSOBA_MEDAL.IDMEDALU AND OSOBA_MEDAL.IDOSOBY IN (SELECT IDOSOBY FROM OSOBA WHERE PESEL = "x") -- Pozdrawiam Janek
Re: Wiersze, których nie ma...
Author: Stokrotka
Date: Fri, 08 Jun 2018 14:32
Date: Fri, 08 Jun 2018 14:32
40 lines
2399 bytes
2399 bytes
>> Mam 3 tabele: >> OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) >> MEDAL (IDMEDALU, NAZWA) >> OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) >> >> W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. >> W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś >> medal wraz z datą otrzymania. >> >> I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę >> wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub >> nullem, >> gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). >> >> Jak to najzgrabniej zrobić? >> >> >> serwer MariaDB > > O ile cię dobrze zrozumiałem to zrobił bym to na zasadzie: > SELECT * FROM MEDAL LEFT JOIN OSOBA_MEDAL > ON MEDAL.IDMEDALU = OSOBA_MEDAL.IDMEDALU > AND OSOBA_MEDAL.IDOSOBY IN (SELECT IDOSOBY FROM OSOBA WHERE PESEL = "x") A jak ci wyjdą te co mają być nulem zamiast daty , gdy nie ma medalu? Może jakieś grupowanie po medalu,i wstawianą wartością first(), oczywiście z warunkiem na pesel, sortowane po ilości medali (wyjdzie 1 lub 0, z medalami będa na wstępie. Ewentualnie union: najpierw te z medalami, a potem bez medalu, wtedy bez grupowania. -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl )
Re: Wiersze, których nie ma...
Author: ydziO
Date: Fri, 08 Jun 2018 15:39
Date: Fri, 08 Jun 2018 15:39
26 lines
1910 bytes
1910 bytes
On 2018-06-08 09:01:43 +0000, Roman Tyczka said: > Witam, > > niby prosta rzecz, ale jakoś koślawo mi to idzie... > > Mam 3 tabele: > OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) > MEDAL (IDMEDALU, NAZWA) > OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) > > W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. > W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś > medal wraz z datą otrzymania. > > I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę > wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, > gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). > > Jak to najzgrabniej zrobić? > > > serwer MariaDB To ja się jeszcze zapytam. Rozumiem, że może się zdarzyć, że medal zostanie wydany ale może nie być daty tak?
Re: Wiersze, których nie ma...
Author: ydziO
Date: Fri, 08 Jun 2018 15:52
Date: Fri, 08 Jun 2018 15:52
41 lines
2392 bytes
2392 bytes
On 2018-06-08 14:32:07 +0000, Stokrotka said: >>> >>> Mam 3 tabele: >>> OSOBA (IDOSOBY, IMIE, NAZWISKO, PESEL) >>> MEDAL (IDMEDALU, NAZWA) >>> OSOBA_MEDAL (ID, IDOSOBY, IDMEDALU, DATA) >>> >>> W tabeli MEDALE mamy wszystkie dostępne medale, powiedzmy 10. >>> W tabeli OSOBA_MEDAL mamy wpisy tylko wtedy, gdy osoba otrzymała jakiś >>> medal wraz z datą otrzymania. >>> >>> I teraz chodzi o to, żeby dla zadanej osoby (po PESELu) wyświetlić listę >>> wszystkich medali (tych 10 możliwych) z datą otrzymania medalu lub nullem, >>> gdy danego medalu nie ma (czyli nie ma wpisu w tabeli OSOBA_MEDAL). >>> >>> Jak to najzgrabniej zrobić? >>> >>> >>> serwer MariaDB >> >> O ile cię dobrze zrozumiałem to zrobił bym to na zasadzie: >> SELECT * FROM MEDAL LEFT JOIN OSOBA_MEDAL >> ON MEDAL.IDMEDALU = OSOBA_MEDAL.IDMEDALU >> AND OSOBA_MEDAL.IDOSOBY IN (SELECT IDOSOBY FROM OSOBA WHERE PESEL = "x") > > > A jak ci wyjdą te co mają być nulem zamiast daty , gdy nie ma medalu? > Może jakieś grupowanie po medalu,i wstawianą wartością first(), > oczywiście z warunkiem na pesel, sortowane po ilości medali (wyjdzie 1 > lub 0, z medalami będa na wstępie. > > Ewentualnie union: najpierw te z medalami, a potem bez medalu, wtedy > bez grupowania. Może coś takiego? Select o.imie,o.nazwisko,om.data,m.nazwa from osoba o left join osoba_medal om on o.idosoby=om.idosoby join medal m om.idmedalu=m.idmedalu where o.pesel=’XXXXXXXXXXX’
Re: Wiersze, których nie ma...
Author: Stokrotka
Date: Fri, 08 Jun 2018 16:47
Date: Fri, 08 Jun 2018 16:47
16 lines
1727 bytes
1727 bytes
> Może coś takiego? > > Select o.imie,o.nazwisko,om.data,m.nazwa > from osoba o left join osoba_medal om on o.idosoby=om.idosoby join medal m > om.idmedalu=m.idmedalu > where o.pesel=’XXXXXXXXXXX’ Tu nie ma napisane, że to wyżuci ci te nieszczęsne nule, ale w zależności od implemantaci może pewnie, bo jest to left. -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl )
Re: Wiersze, których nie ma...
Author: ydziO
Date: Fri, 08 Jun 2018 17:47
Date: Fri, 08 Jun 2018 17:47
17 lines
1860 bytes
1860 bytes
On 2018-06-08 16:47:10 +0000, Stokrotka said: >> >> Może coś takiego? >> >> Select o.imie,o.nazwisko,om.data,m.nazwa >> from osoba o left join osoba_medal om on o.idosoby=om.idosoby join >> medal m om.idmedalu=m.idmedalu >> where o.pesel=’XXXXXXXXXXX’ > > Tu nie ma napisane, że to wyżuci ci te nieszczęsne nule, > ale w zależności od implemantaci może pewnie, bo jest to left. Sprawdzałeś czy jest tak jak piszesz? Myślę, żę właśnie "left join" powinien załatwić sprawę. Sprawdź czy działa i co zwraca. Wtedy będziemy wiedzieli jak jest isię będziemy zastanawiać co poprawić.
Re: Wiersze, których nie ma...
Author: Stokrotka
Date: Fri, 08 Jun 2018 18:27
Date: Fri, 08 Jun 2018 18:27
23 lines
2226 bytes
2226 bytes
>>> Select o.imie,o.nazwisko,om.data,m.nazwa >>> from osoba o left join osoba_medal om on o.idosoby=om.idosoby join medal >>> m om.idmedalu=m.idmedalu >>> where o.pesel=’XXXXXXXXXXX’ >> >> Tu nie ma napisane, że to wyżuci ci te nieszczęsne nule, >> ale w zależności od implemantaci może pewnie, bo jest to left. > > Sprawdzałeś czy jest tak jak piszesz? > Myślę, żę właśnie "left join" powinien załatwić sprawę. > Sprawdź czy działa i co zwraca. Wtedy będziemy wiedzieli jak jest isię > będziemy zastanawiać co poprawić. Oczywiście, że tylko piszę i nic nie sprawdziłam. Ale mam doświadczenie i wiem, że czasem gdy w systemie nie jest zaimplementowany left join a tylko join takie zdanie może komputer potraktować jako zwykły join, i programista i tak jest szczęśliwy, że działa pszynajmniej częściowo. -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl )
Re: Wiersze, których nie ma...
Author: ydziO
Date: Fri, 08 Jun 2018 18:54
Date: Fri, 08 Jun 2018 18:54
26 lines
2287 bytes
2287 bytes
On 2018-06-08 18:27:27 +0000, Stokrotka said: >>>> >>>> Select o.imie,o.nazwisko,om.data,m.nazwa >>>> from osoba o left join osoba_medal om on o.idosoby=om.idosoby join >>>> medal m om.idmedalu=m.idmedalu >>>> where o.pesel=XXXXXXXXXXX >>> >>> Tu nie ma napisane, że to wyżuci ci te nieszczęsne nule, >>> ale w zależnoci od implemantaci może pewnie, bo jest to left. >> >> Sprawdzałe czy jest tak jak piszesz? >> Mylę, żę włanie "left join" powinien załatwić sprawę. >> Sprawd czy działa i co zwraca. Wtedy będziemy wiedzieli jak jest isię >> będziemy zastanawiać co poprawić. > > Oczywicie, że tylko piszę i nic nie sprawdziłam. > Ale mam dowiadczenie i wiem, że czasem > gdy w systemie nie jest zaimplementowany left join a tylko join > takie zdanie może komputer potraktować jako zwykły join, > i programista i tak jest szczęliwy, że działa pszynajmniej częciowo. Join dołącza tylko te rekordy które dokładnier pasują. Left join dołącza te rekordy które pasują i pokazuje te które nie pasują z null-ami. Dlatego jak możesz, to przetestuj i sprawdź wynik.
Re: Wiersze, których nie ma...
Author: Jan Drawski
Date: Mon, 11 Jun 2018 00:18
Date: Mon, 11 Jun 2018 00:18
9 lines
1307 bytes
1307 bytes
> A jak ci wyjdą te co mają być nulem zamiast daty , gdy nie ma medalu? Medal jest tylko dla innej osoby. Dla wybranej osoby przy takim medalu będą nulle bo w tabeli łączącej nie będzie rekordów spełniających kryteria z klauzuli ON. -- Pozdrawiam Janek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads