2011-11-11 46 views
3

這是我第一次涉足數據庫中,並想知道是否有可能做以下選擇: 我有兩個表的mysql中選擇

student (id, name, phone) 
photos (id, student_id, photo) 

我想找回學生的手機是誰的名字是說'湯姆',但前提是他有照片。 是否有可能有這樣的條件?

非常感謝

+1

您需要閱讀連接。 –

回答

3
select s.phone from student s 
inner join photos p 
on p.student_id=s.id 
where p.photo is not null 
+0

+1 - 不爲null是關鍵 – bryanmac

+0

@bryanmac:假設'photos.photo'是可以爲空的。 –

+0

@ypercube:難道不能從這個問題推斷出來嗎? '只有當它有一張照片...' – Icarus

0

這就是所謂的INNER JOIN

select top 1 name from student s 
inner join photos p 
on s.id = p.student_id 
where name like 'Tom' 
0

是。使用EXISTS

SELECT phone 
FROM student 
WHERE name = 'Tom' 
    AND EXISTS 
     (SELECT * 
     FROM photos 
     WHERE photos.student_id = student.id 
    ) 

或使用JOIN。你需要爲使用DISTINCTGROUP BY這樣你就不會得到相同的電話20次,如果用戶有20張照片:

SELECT DISTINCT student.phone 
FROM student 
    JOIN photos 
    ON photos.student_id = student.id 
WHERE student.name = 'Tom' 
+0

應該是內部連接imo,它不需要DISTINCT,讓應用程序選擇要顯示的照片。另外我認爲你的意思是'相同的照片20'。 –

+0

不,我是說同一部手機。我們有'SELECT phone',而不是'SELECT photo'。 –

+0

另外:'INNER JOIN'與'JOIN'相同。如果我們只想顯示電話而不顯示電話+照片,則不需要使用「DISTINCT」。 –

0

在這種情況下,你可以使用一個連接。試試這個:

SELECT student.phone 
FROM students 
INNER JOIN photos 
ON student.id=photos.student_id 
WHERE student.name LIKE 'Tom'