如何组合两个简单的SQL查询

时间:2013-09-03 16:10:23

标签: mysql 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
)

如何组合它们以便我不必运行两个查询?

4 个答案:

答案 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'

答案 1 :(得分:0)

嵌套查询:

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

答案 2 :(得分: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'

答案 3 :(得分: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'