我有以下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
)
如何组合它们以便我不必运行两个查询?
答案 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'