Article View: pl.comp.lang.delphi.bazy-danych
Article #82607Re: [MySQL] Dwa klucze obce z jednej tabeli
From: arivald
Date: Thu, 29 Oct 2015 06:32
Date: Thu, 29 Oct 2015 06:32
81 lines
3373 bytes
3373 bytes
W dniu 2015-10-28 o 21:50, Marek Cz. pisze: > > W uproszczeniu są trzy tabele, Serials (główna), Users i Devices: > > Serials: > ID: INTEGER > Serial: VARCHAR(20) > DeviceType: INTEGER (klucz obcy Devices.ID) > CreatedBy: INTEGER (klucz obcy Users.ID) > ModifiedBy: INTEGER (klucz obcy Users.ID) > > Users: > ID: INTEGER > FirstName: VARCHAR(50) > LastName: VARCHAR(50) > > Devices: > ID: INTEGER > DeviceName: VARCHAR(20) > > Jakie powinno być zapytanie do bazy, aby przedstawić całą główną > tabelę "Serials", > w której klucze obce zostaną zastąpione nazwami z tabel "Users" i > "Devices", > czyli wynikowa tabela będzie miała kolumny np. takie: > > Serial > DeviceName > CreatedByFirstName > CreatedByLastName > ModifiedByFirstName > ModifiedByLastName > > gdzie > > Serial: pochodzi oczywiście z tabeli Serials > > DeviceName: nazwa urządzenia z tabeli Devices.DeviceName określona > na podstawie klucza Serials.DeviceType > > CreatedByFirstName: imię użytkownika z tabeli Users.FirstName określone > na podstawie klucza Serials.CreatedBy > > CreatedByLastName: nazwisko użytkownika z tabeli Users.LastName określone > na podstawie klucza Serials.CreatedBy > > ModifiedByFirstName: imię użytkownika z tabeli Users.FirstName określone > na podstawie klucza > Serials.ModifiedBy > > ModifiedByLastName: nazwisko użytkownika z tabeli Users.LastName > określone > na podstawie klucza > Serials.ModifiedBy > > Jak można zauważyć, w tabeli "Serials" występują dwie kolumny > CreatedBy i ModifiedBy > z kluczami obcymi powiązanymi z ID z jednej tabeli, czyli "Users". > Wartości tych kluczy > mogą być różne w jednym rekordzie i dlatego nie wiem, jak skonstruować > zapytanie, > aby uzyskać oczekiwaną tabelę. tu akurat MUSISZ użyć aliasów w joinach, żeby rozróżnić wiązania po różnych kluczach. A apliasy i tak się przydają, do skracania tekstu SQLa. select s.Serial, d.DeviceName, c.CreatedBy as CreatedByFirstName, c.LastName as CreatedByLastName, m.FirstName as ModifiedByFirstName, m.LastName as ModifiedByLastNam from Serials s left join Devices d on d.ID = s.DeviceType left join Users c on c.ID = s.CreatedBy left join Users m on m.ID = s.ModifiedBy -- Arivald
Technical Details
Message-ID:
<n0seht$23i$1@speranza.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mailReferences:
<xn0jstcud1iyaee001@news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail From: arivald <arivald@nowhere.interia.pl> Newsgroups: pl.comp.lang.delphi.bazy-danych Subject: Re: [MySQL] Dwa klucze obce z jednej tabeli Date: Thu, 29 Oct 2015 07:32:38 +0100 Organization: Aioe.org NNTP Server Lines: 83 Message-ID: <n0seht$23i$1@speranza.aioe.org> References: <xn0jstcud1iyaee001@news.atman.pl> NNTP-Posting-Host: STSYFnZ+WYQvdc8tmgPsag.user.speranza.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 X-Notice: Filtered by postfilter v. 0.8.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit