0

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

2 つのクエリを実行する必要がないように、それらを組み合わせるにはどうすればよいですか?

4

4 に答える 4

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'
于 2013-09-03T16:12:56.353 に答える
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 11行だけが返されるようにするために使用します。

それ以上の行がある場合は、 の使用を検討してjoinください。

于 2013-09-03T16:14:32.133 に答える
0

person_magazine テーブルには、人物と雑誌名のエントリが 1 つだけあると仮定します。

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'
于 2013-09-03T16:14:44.710 に答える
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'
于 2013-09-03T16:16:30.407 に答える