Article View: pl.comp.bazy-danych
Article #195040Re: Zapytanie eliminujące bez podzapytań (master-detail-detail)
From: tomek
Date: Thu, 14 Jul 2016 15:28
Date: Thu, 14 Jul 2016 15:28
86 lines
3100 bytes
3100 bytes
----- Original Message ----- From: "Roman Tyczka" <noemail@because.no> Newsgroups: pl.comp.bazy-danych Sent: Wednesday, July 13, 2016 3:22 PM Subject: Zapytanie eliminujące bez podzapytań (master-detail-detail) > Hi, > > Mam 3 tabelki w relacji master-detail-detail: > RODZICE > ID| IMIE > 1| MARIA > 2| JAN > 3| KATARZYNA > 4| PIOTR > > DZIECI > ID| IMIE| ID RODZICA > 1| JULKA | 1 > 2| ZOSIA | 1 > 3| HENIU | 2 > 4| ZUZIA | 3 > 5| VIOLA | 4 > > ZABAWKI > ID| NAZWA | ID DZIECKA > 1| LALKA | 1 > 2| AUTKO | 2 > 3| KLOCKI| 3 > 4| PIŁKA | 4 > 5| GRA | 5 > 6| PISTOL| 3 > 7| LALKA | 4 > > Każde dziecko może mieć kilka zabawek, każdy rodzic kilkoro dzieci. > Jak za pomocą jednego selecta wydobyć tylko tych rodziców, których dzieci > nie mają określonych zabawek, np. lalki? > > Z powyższych danych zapytanie ma zwrócić tylko JANA i PIOTRA, bo dziecko > MARII oraz dziecko KATARZYNY mają lalkę. > > SELECT R.ID, R.IMIE FROM RODZICE R > JOIN DZIECI D ON D.IDRODZICA = R.ID > JOIN ZABAWKI Z ON Z.IDDZIECKA = D.ID > WHERE ??? > > ps. umiem to zrobić z podzapytaniem w sekcji where, ale chciałbym się > dowiedzieć czy można prościej SELECT R.ID, R.IMIE, D.IMIE, Z.NAZWA FROMRODZICE R INNER JOIN DZIECI D LEFT JOIN ZABAWKI Z ON Z.IDDZIECKA = D.ID AND Z.NAZWA = 'LALKA' WHERE 1 AND D.IDRODZICA = R.ID Otrzymasz listę par rodzic-dziecko gdzie w kolumnie Z.NAZWA czasem będzie LALKA a czasem NULL ----------------------------------------------------------------------------------------------- Teraz można kombinować dalej (MYSQL) i pogrupować po rodzicu: (coś + NULL) => NULL SELECT R.ID, R.IMIE, D.IMIE, CONCAT(Z.NAZWA) AS nazwaZabawki FROM RODZICE R INNER JOIN DZIECI D LEFT JOIN ZABAWKI Z ON Z.IDDZIECKA = D.ID AND Z.NAZWA = 'LALKA' WHERE 1 AND D.IDRODZICA = R.ID GROUP BY R.ID HAVING nazwaZabawki IS NULL PS. Pisane z głowy. Być może zamiast CONCAT powinno byc coś lepszego do agregacji. Pozdrawiam Tomek
Technical Details
Message-ID:
<5787af88$0$12558$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<swisjwkg9lsr.dlg@tyczka.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail From: "tomek" <skowtom@wp.xxx.pl> Newsgroups: pl.comp.bazy-danych References: <swisjwkg9lsr.dlg@tyczka.com> Subject: Re: Zapytanie eliminujące bez podzapytań (master-detail-detail) Date: Thu, 14 Jul 2016 17:28:07 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-RFC2646: Format=Flowed; Original Lines: 95 Message-ID: <5787af88$0$12558$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 83.3.208.121 X-Trace: 1468510088 unt-rea-a-01.news.neostrada.pl 12558 83.3.208.121:1195 X-Complaints-To: abuse@news.neostrada.pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit