2013-09-03 5 views
0

J'ai la requête SQL suivante (s):Comment combiner deux simples requêtes SQL

//Get id 
SELECT id from magazine where name = 'Web Designer' 


SELECT avatar from person where newsletter = 1 and id in 
(
SELECT person_id as id FROM person_magazine WHERE magazine_id = 9 //use id from previous query 
) 

Comment puis-je les combiner, donc je n'ai pas exécuter deux requêtes?

+1

avez-vous essayé de remplacer 9 avec: (VOTRE PREMIER ICI QUERY) – Brian

+0

parfait ... merci! –

Répondre

4

Je pense que vous devez en savoir plus sur les jointures. Ce qui suit est la requête que vous semblez vraiment vouloir:

SELECT p.avatar 
from person p join 
    person_magazine pm 
    on pm.person_id = p.id join 
    magazine m 
    on pm.magazine_id = m.id 
where p.newsletter = 1 and m.name = 'Web Designer' 
+0

Belles choses. Merci! –

0

Nest requêtes:

SELECT avatar 
from person 
where 
    newsletter = 1 
    and id in (
     SELECT person_id as id 
     FROM person_magazine 
     WHERE magazine_id = (SELECT id from magazine where name = 'Web Designer' limit 1) 
    ) 

Ou utiliser une variable:

set @mag_id = (SELECT id from magazine where name = 'Web Designer' limit 1); 
SELECT avatar from person where newsletter = 1 and id in 
(
    SELECT person_id as id FROM person_magazine WHERE magazine_id = @mag_id 
) 

J'utilise limit 1 pour assurer qu'une seule ligne est retourné.

S'il y a plus de lignes, pensez à utiliser join.

0

En supposant qu'il n'y a qu'une seule entrée pour une personne et pour un nom de magazine dans la table person_magazine.

SELECT avatar 
    FROM person P 
INNER JOIN person_magazine PM 
    ON P.id = pm.person_id 
INNER JOIN magazine M 
    ON PM.magazine_id = M.id 
WHERE P.newsletter = 1 
    AND PM.name = 'Web Designer' 
0
SELECT avatar FROM person p 
     INNER JOIN person_magazine p_m ON p.id = p_m.person_id 
     WHERE p.newsletter = 1 
     AND p_m.name = 'Web Designer' 
+0

Je pense que vous avez oublié de vous joindre à la table des magazines ... –