Od jakiegoś czasu próbuję zrozumieć sprzężenia, zauważyłem sporo przykładów pokazujących, jak pobrać wartość na podstawie kwerendy dwutabelowej za pomocą sprzężenia lewego / wewnętrznego. Postaram się dla was wszystkich narysować mój przykład, mam nadzieję, że pomoże to w wyjaśnieniu mojego pytania.

Table 1:
project_id  |  project_name
    1          super-project

Table 2:
project_id  |  course_id       ---> project_id and course_id are foreign keys here.
    1              3

Table 3:
course_id  |  course_name      ---> course_id is a primary key here
    3      |  Writing 101

mój cel:

Chciałbym móc zwrócić "Writing 101" przy użyciu project_id. Tak więc, jeśli wiem, że project_id to 1, zapytałbym db, aby znaleźć, że Course_id powiązany z bieżącym projektem to 3. Następnie użyłbym identyfikatora kursu 3 do przeszukania tabeli 3 i stwierdzenia, że ​​pokrewna nazwa_kursu to writing 101.

Czy można to zrobić w pojedynczym zapytaniu przy użyciu pewnego rodzaju sprzężenia?

0
user725913 1 marzec 2012, 07:04

2 odpowiedzi

Najlepsza odpowiedź
select course_name from Table3
inner join Table2
on Table2.course_id = Table3.course_id
where Table2.project_id = 1

Zauważ, że potrzebny jest tylko 1 dołączenie!

Zauważ również, że jeśli project_id = 1 występuje w więcej niż jednym kursie, wszystkie te kursy się pojawią.

Czy możesz wyjaśnić, dlaczego potrzebne jest tylko jedno sprzężenie, w przeciwieństwie do poniższej odpowiedzi, która wymaga dwóch sprzężeń?

Druga odpowiedź nie wymaga dwóch sprzężeń. Ponieważ project_id jest obecny w tabeli „środkowej”, nie ma potrzeby szukania go w tabeli Table1. Teraz, jeśli potrzebujesz nazwy projektu (a tak nie jest, ponieważ nie wspomniałeś o tym w pytaniu), to musiałbyś dołączyć do Tabeli1

3
Mosty Mostacho 1 marzec 2012, 07:08

Proszę bardzo:

SELECT c.course_name
FROM Table3 c
INNER JOIN Table2 pc ON pc.course_id = c.course_id
INNER JOIN Table1 p ON p.project_id = pc.project_id
WHERE project_id = 1
1
Diego 1 marzec 2012, 07:06