この章では、導出表に関して確認していきましょう。導出表は、事実バーチャルな表で、実際にはデータベースには存在しません。導出表は、 エイリアスを使用することによって、一時的に保存されます。
1. 導出表
それぞれの投稿の「いいね」の数とコメントの数が欲しいと仮定しましょう。
SELECT P.ID, P.post_title, derivLikes.nbLikes, derivComm.nbComments
FROM Posts AS P
LEFT JOIN
( SELECT post_ID, COUNT(*) AS nbLikes
FROM Likes
GROUP BY post_ID ) AS derivLikes ON P.ID = derivLikes.post_ID
LEFT JOIN
( SELECT post_ID, COUNT(*) AS nbComments
FROM Comments
GROUP BY post_ID ) AS derivComm ON P.ID = derivComm.post_ID
下記の表が取得できます。
{{h}} |
---|
{{r}} |
導出表の構造に関してもう少しお話ししましょう。上記の例で、2つの導出表が構成されました。最初のは、それぞれの投稿の「いいね」の数、2つ目のは、それぞれの投稿のコメントの数を含みます。両方に、エイリアスを使用してラベルが割り当てられます。すなわち、derivLikes
とderivComm
です。最後に、全ての投稿において、集約データに外部結合がなされます。
2. データのサニタイズ
外部結合で、一致が起きない場合に、0を表示させましょう。そのために、IFNULL
節を使用します。
SELECT P.ID, P.post_title, IFNULL(derivLikes.nbLikes,0) AS Likes, IFNULL(derivComm.nbComments,0) AS Comments
FROM Posts AS P
LEFT JOIN
( SELECT post_ID, COUNT(*) AS nbLikes
FROM Likes
GROUP BY post_ID ) AS derivLikes ON P.ID = derivLikes.post_ID
LEFT JOIN
( SELECT post_ID, COUNT(*) AS nbComments
FROM Comments
GROUP BY post_ID ) AS derivComm ON P.ID = derivComm.post_ID
下記の表が取得できます。
{{h}} |
---|
{{r}} |