🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82607

Re: [MySQL] Dwa klucze obce z jednej tabeli

#82607
From: arivald
Date: Thu, 29 Oct 2015 06:32
81 lines
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-mail
References: <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