2011-11-11 4 views
3

c'est la première fois que je suis barboter dans les bases de données et je me demandais s'il était possible de faire ce qui suit: J'ai deux tablesmysql select au sein sélectionnez

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

Je voulais récupérer le téléphone étudiant qui est le nom est dit 'Tom' mais seulement s'il a une photo. Est-il possible d'avoir une condition comme celle-ci?

Un grand merci

+1

Vous devez lire les jointures. –

Répondre

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 - N'est pas NULL est la clé – bryanmac

+0

@bryanmac: En supposant que 'photos.photo' est nullable. –

+0

@ypercube: Cela ne peut-il pas être déduit de la question? 'seulement si elle a une photo ...' – Icarus

0

que l'on appelle un INNER JOIN.

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

Oui. En utilisant EXISTS:

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

ou en utilisant JOIN. Vous devez utiliser soit DISTINCT ou GROUP BY de sorte que vous ne recevez pas le même téléphone 20 fois si l'utilisateur a 20 photos:

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

Devrait être une jointure interne imo, ce qui supprime la nécessité d'un DISTINCT, laissez l'application sélectionner la photo à afficher. Aussi je pense que vous vouliez dire 'même photo 20'. –

+0

Non, je voulais dire le même téléphone. Nous avons 'SELECT téléphone', pas' SELECT photo'. –

+0

Aussi: 'INNER JOIN' est le même que' JOIN'. Ni sort avec le besoin de 'DISTINCT', si nous voulons afficher uniquement le téléphone et non pas le téléphone + photos. –

0

Dans ce cas, vous pouvez utiliser une jointure. Essayez ceci:

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