2013-09-03 3 views
0

У меня есть следующие SQL-запрос (ы):Как объединить два простых 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 
) 

Как объединить их, поэтому я не придется запускать два запроса?

+1

пытались ли вы заменить 9 с: (ваш первый запрос здесь) – Brian

+0

Совершенные ... спасибо! –

ответ

4

Я думаю, вам нужно узнать о соединениях. Ниже приведен запрос вы действительно кажется, хотят:

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

Прекрасный материал. Благодаря! –

0

Nest запросы:

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) 
    ) 

Или использовать переменную:

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 
) 

я использую limit 1, чтобы гарантировать, что только одна строка возвращается.

Если количества строк, рассмотрите возможность использования join.

0

Предполагая, что есть только одна запись для человека и имя журнала в таблице 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

Я думаю, вы забыли присоединиться к журнальному столу ... –

Смежные вопросы