2012-10-15 16 views
8

otrzymuje następujące dwie tabele:SQL SELECT z wielu tabel

Person table 
id (pk) 
first 
middle 
last 
age 

Address table 
id(pk) 
person_id (fk person.id) 
street 
city 
state 
zip 

Jak utworzyć instrukcję SQL, która zwraca wszystkie informacje dla osób z kodem pocztowym 97229?

+0

ja po prostu nie jestem pewien, gdzie zacząć. Rozumiem, jak wybrać jedną tabelę, tj. WYBIERZ * od osoby GDZIE najpierw = "John", ale to połączenie tabel, w których zgubiłem się – user1420913

+0

dokładnie to, czego potrzebowałem! dziękuję za to, że jest to proste. – user1420913

Odpowiedz

21
Select * from people p, address a where p.id = a.person_id and a.zip='97229'; 

Albo trzeba TRY użyciu JOIN który jest bardziej wydajny i lepszy sposób to zrobić, jak Gordon Linoff w komentarzach poniżej również mówi, że trzeba się tego nauczyć.

SELECT p.*, a.street, a.city FROM persons AS p 
JOIN address AS a ON p.id = a.person_id 
WHERE a.zip = '97299'; 

Tutaj p.* oznacza, że ​​pokaże wszystkie kolumny z tabeli PERSONS.

+0

Twoje pierwsze 'gdzie' było niepoprawne (w oparciu o twoje bieżące' JOIN' - zmieniłem je. –

+1

co, jeśli nie ma związku między obiema tabelami, po prostu chcemy pobrać rekordy jeden po drugim – SAR

+0

@SAR to, co chcę Czy kiedykolwiek to rozgryzłeś? – Anupam

1

tak:

SELECT p.*, a.street, a.city FROM persons AS p 
JOIN address AS a ON p.id = a.person_id 
WHERE a.zip = '97299' 
4

Trzeba połączyć dwie tabele:

select p.id, p.first, p.middle, p.last, p.age, 
     a.id as address_id, a.street, a.city, a.state, a.zip 
from Person p inner join Address a on p.id = a.person_id 
where a.zip = '97229'; 

Spowoduje to zaznaczenie wszystkich kolumn z obu tabel. Można oczywiście ograniczyć to, wybierając inne kolumny w klauzuli select.

1

Najpierw wybierz wszystkie rekordy z tabeli osób, a następnie dołącz wszystkie te rekordy do innej tabeli "Adres" ... teraz masz zapis wszystkich osób, które mają swój adres w tabeli adresów ... aby w końcu przefiltrować swój rekord przez kod pocztowy.

select * from Person as P inner join Address as A on 
    P.id = A.person_id Where A.zip='97229' 
0
select P.*, 
A.Street, 
A.City, 
A.State 
from Preson P 
inner join Address A on P.id=A.Person_id 
where A.Zip=97229 
Order by A.Street,A.City,A.State