Dwa klucze obce z jednej tabeli

Dwa klucze obce z jednej tabeli
MA
  • Rejestracja: dni
  • Ostatnio: dni
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 :)

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
2

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

Kopiuj
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
MA
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.