Dwa klucze obce z jednej tabeli

0

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ę.

Proszę o pomoc :)

2

Chyba o to chodzi, (pisane na sucho, także lieterówk itp mogą być, ale schemat zapytania powinien być OK)

SELECT
	S.id As ID,
	S.Serial AS Serial,
	D.DeviceName AS Device,
	UC.FirstName AS CreatedByFirstName,
	UC.LastName AS CreatedByLastName,
	UM.FirstName AS ModifiedByByFirstName,
	UM.LastName AS ModifiedByByLastName
FROM
	Serials S JOIN
	Devices D ON S.DeviceType = D.Id JOIN
	User UC ON UC.Id = S.CreatedBy JOIN --CreatedBy połączenie użytkownika tworzącego wpis
	User UM ON UM.Id = S.ModifiedBy --ModifiedBy połączenie użytkownika modyfikującego rekord
0

@michta, po drobnej korekcji literówek działa elegancko, dzięki !!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1