2012-10-15 102 views
8

鉴于以下两个表:SQL SELECT语句具有多个表的

Person table 
id (pk) 
first 
middle 
last 
age 

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

如何创建一个返回的人邮编97229的所有信息的SQL语句?

+0

我只是不知道从哪里开始。我明白如何从一个表,即SELECT * FROM WHERE人首先=“约翰”选择,但它在我迷路 – user1420913

+0

正是我需要的表的结合!感谢你保持简单。 – user1420913

回答

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

或者使用JOIN这是在下面还评论这样做,因为戈登·利诺夫一个更有效率和更好的方式必须TRY说,你需要学习这一点。

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

这里p.*表示它将显示人员表的所有列。

+0

你的第一个'where'是不正确的(根据您的实际'JOIN' - 我已经编辑它什么,如果 –

+1

有两个表之间没有关系,我们只是想获取其他后 – SAR

+0

@SAR一个记录这就是我要做的。你有没有搞清楚? – Anupam

1

就像是:

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

你需要加入两个表:

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'; 

这会从两个表中选择所有列。您当然可以通过在select条款中选择不同的列来限制这一点。

1

首先选择从人表中的所有记录,然后再加入所有这些记录与另一个表“地址” ......现在u有所有谁都有自己的地址表中的地址的人的记录...所以最后通过筛选记录邮政编码。

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