Database
 sql >> Baza danych >  >> RDS >> Database

Jak dołączyć na wielu kolumnach

Problem:

Chcesz połączyć tabele w wielu kolumnach, używając podstawowego klucza złożonego w jednej tabeli i obcego klucza złożonego w drugiej.

Przykład:

Nasza baza danych zawiera trzy tabele o nazwie student , enrollment i payment . student tabela zawiera dane w następujących kolumnach:id (klucz podstawowy), first_name i last_name .

id imię nazwisko
1 Elia Willson
2 Tomek Brązowy
3 Sandra Młynarz

enrollment tabela zawiera dane w następujących kolumnach:klucz podstawowy (student_id i course_code ), is_active i start_date .

identyfikator studenta kod_kursu jest_aktywny data_początkowa
1 GD03 prawda 2020-01-20
1 AP01 fałsz 2020-03-10
2 SL01 prawda 2020-05-05
3 SL01 prawda 2020-06-01

payment tabela zawiera dane w następujących kolumnach:klucz obcy (student_id i course_code , klucze podstawowe enrollment tabela), status i amount .

identyfikator studenta kod_kursu stan kwota
1 GD03 płatne 230
1 AP01 oczekujące 100
2 SL01 oczekujące 80
3 SL01 oczekujące 110

Pokażmy imię i nazwisko każdego ucznia, kod kursu oraz status i kwotę płatności.

Rozwiązanie:

SELECT
  s.last_name, s.first_name,
  p.course_code, p.status, p.amount
FROM enrollment e
JOIN student s
  ON s.id=e.student_id
JOIN payment p
  ON p.course_code=e.course_code
	AND p.student_id=e.student_id;
nazwisko imię kod_kursu stan kwota
Willson Elia GD03 płatne 230
Willson Elia AP01 oczekujące 100
Brązowy Tomek SL01 oczekujące 80
Młynarz Sandra SL01 oczekujące 110

Dyskusja:

Jeśli chcesz, aby dane przechowywane w tabelach były połączone kluczem złożonym, który jest kluczem podstawowym w jednej tabeli i kluczem obcym w innej tabeli, po prostu użyj warunku łączenia w wielu kolumnach.

W jednej połączonej tabeli (w naszym przykładzie enrollment ), mamy klucz podstawowy zbudowany z dwóch kolumn (student_id i course_code ). W drugiej tabeli (payment ), mamy kolumny, które są obcym kluczem złożonym (student_id i course_code ). Jak możemy połączyć tabele za pomocą tych kluczy złożonych?

Łatwo! Wystarczy użyć JOIN klauzula z więcej niż jednym warunkiem przy użyciu operatora AND po pierwszym warunku. W naszym przykładzie używamy tego warunku:

p.course_code=e.course_code AND p.student_id=e.student_id

W pierwszej części używamy student_id kolumna z enrollment table i student_id z payment stół. W następnym warunku otrzymujemy course_code kolumna z enrollment table i course_code z payment tabela.

Zwróć uwagę, że student_id i course_code kolumny tworzą klucz podstawowy w enrollment stół. Dlatego są używane w payment tabela jako klucz obcy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czym są bazy danych?

  2. Uzasadnienie nowego Maca Pro

  3. Jak obliczyć różnicę między dwoma datami w T-SQL

  4. Profilowanie baz danych w IRI Workbench

  5. Szacowanie liczności:łączenie statystyk gęstości