🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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...
#195594
Author: Roman Tyczka
Date: Fri, 08 Jun 2018 09:01
25 lines
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...
#195595
Author: Stokrotka
Date: Fri, 08 Jun 2018 10:20
24 lines
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...
#195596
Author: Roman Tyczka
Date: Fri, 08 Jun 2018 11:34
26 lines
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...
#195597
Author: Jan Drawski
Date: Fri, 08 Jun 2018 11:57
31 lines
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...
#195598
Author: Stokrotka
Date: Fri, 08 Jun 2018 14:32
40 lines
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...
#195605
Author: ydziO
Date: Fri, 08 Jun 2018 15:39
26 lines
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...
#195599
Author: ydziO
Date: Fri, 08 Jun 2018 15:52
41 lines
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...
#195600
Author: Stokrotka
Date: Fri, 08 Jun 2018 16:47
16 lines
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...
#195601
Author: ydziO
Date: Fri, 08 Jun 2018 17:47
17 lines
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...
#195602
Author: Stokrotka
Date: Fri, 08 Jun 2018 18:27
23 lines
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...
#195603
Author: ydziO
Date: Fri, 08 Jun 2018 18:54
26 lines
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ż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.

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...
#195604
Author: Jan Drawski
Date: Mon, 11 Jun 2018 00:18
9 lines
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