Mam trzy stoły, powiedzmy student, stan studenta, kurs studencki Student Stan studenta

Kurs studencki

Muszę dołączyć do tabeli 1 i Tabela 3 na podstawie rezultatu dołączenia, dostaję z tabeli 1 i tabeli 2. Co oznacza, że muszę wyświetlić kurs dla studenta tylko wtedy, gdy jest w stanie aktywnym. Mój wynikowy stół powinien wyglądać coś takiego Zwycięzca tabela

Powinien wyświetlić kurs tylko dla studentów aktywnych, dla nieaktywnych uczniów, nie powinno być wyświetlane ich cusre, ale ten rekord jest nadal potrzebny.

Czy mogę pomóc, jak postępować

-1
Sirisha 1 czerwiec 2018, 19:46

3 odpowiedzi

Najlepsza odpowiedź

Powinieneś naprawdę opublikować swoje próby, abyśmy mogli zobaczyć, co próbowałeś, a gdzie wpadniesz w problemy.

To, co chcesz wykonać tutaj, jest LEFT JOIN, używając identyfikatora studenta jako podstawowy i obcy klucz, aby połączyć dane między tabelami. Chcesz umieścić swój stan w instrukcji dołączającej, która dołącza do tabeli kursu z twoimi dwoma stołami, dzięki czemu kursy są wyświetlane tylko dla aktywnych studentów. Jeśli miałbyś umieścić stan WHERE na końcu, trafiłeś do filtrowania całych wierszy, co jest przydatne, jeśli chcesz odzyskać wszystko tylko od aktywnych studentów, filtrując całkowicie nieaktywnych uczniów.

To jest SQL:

SELECT
  tbl_student.id,
  tbl_student.name,
  tbl_student_course.course as course,
  tbl_current_state.state as state
FROM
  tbl_student
LEFT JOIN
  tbl_current_state ON tbl_student.id = tbl_current_state.id
LEFT JOIN
  tbl_student_course ON tbl_current_state.id = tbl_student_course.id AND tbl_current_state.state = 'Active'
ORDER BY
 tbl_student.id ASC

Praca SQL Fiddle.

0
Martin 1 czerwiec 2018, 19:15

Używam T-SQL, ale jeśli zdobędę to, co masz na myśli, że jestem zdania, że powinieneś użyć "Left Dołącz" i umieść stan filtrowania w klauzuli.

1
Arkadiusz 1 czerwiec 2018, 16:52

Możesz dodać active jako kryteria do połączenia. Następnie left join Identyfikator w StudentCourse do ID w StudentState.

Demo

SELECT s.studentno
  , s.studentname
  , sc.course
FROM student s
LEFT JOIN studentstate ss
  ON ss.studentno = s.studentno AND ss.currentstate = 'Active'
LEFT JOIN studentcourse sc
  ON ss.studentno = sc.studentno
0
SQLChao 1 czerwiec 2018, 17:07