結果: 私は三つの方法を使用しました:1は、それぞれ(鉱山)に参加カウントが参加 - 最適化
- 三つのサブクエリ、どこでフィルタリング
- 三つのサブクエリ、ノー参加し、私は、「説明」および各クエリがしなければならない作業を説明し、「プロファイリング」と以下の結果は驚くべきことではありませんでしたし、いくつかの統計を作った
(SlimsGhost)
相対結果:
原文
アイデアは、毎回同じPKを使用して4つのテーブルを結合し、各結合が別々に与える行の数を数えることです。
明らかな答えは、サブクエリを使用して各結合を個別に実行することです。
ただし、1つのクエリで行うことはできますか?より効率的でしょうか?
select "LES CIGARES DU PHARAON" as "Titre",
(select count(payalb.idPays)
from album alb
left join pays_album payalb using (idAlb)
where alb.titreAlb = "LES CIGARES DU PHARAON") as "Pays",
(select count(peralb.idPers)
from album alb
left join pers_album peralb using (idAlb)
where alb.titreAlb = "LES CIGARES DU PHARAON") as "Personnages",
(select count(juralb.idJur)
from album alb
left join juron_album juralb using (idAlb)
where alb.titreAlb = "LES CIGARES DU PHARAON") as "Jurons"
;
+------------------------+------+-------------+--------+
| Titre | Pays | Personnages | Jurons |
+------------------------+------+-------------+--------+
| LES CIGARES DU PHARAON | 3 | 13 | 50 |
+------------------------+------+-------------+--------+
テーブルアルバム行:22
テーブルpays_album行:45
テーブルpersonnage_album行:100
テーブルjuron_album行:1704
ここに私が試したものです。
select alb.titreAlb as "Titre",
sum(case when alb.idAlb=payalb.idAlb then 1 else 0 end) "Pays",
sum(case when alb.idAlb=peralb.idAlb then 1 else 0 end) "Personnages",
sum(case when alb.idAlb=juralb.idAlb then 1 else 0 end) "Jurons"
from album alb
left join pays_album payalb using (idAlb)
left join pers_album peralb using (idAlb)
left join juron_album juralb using (idAlb)
where alb.titreAlb = "LES CIGARES DU PHARAON"
group by alb.titreAlb
;
+------------------------+------+-------------+--------+
| Titre | Pays | Personnages | Jurons |
+------------------------+------+-------------+--------+
| LES CIGARES DU PHARAON | 1950 | 1950 | 1950 |
+------------------------+------+-------------+--------+
それは完全な結合テーブルの行の合計数をカウントし、...(= 3 * 13 * 50 1950)
スキーマ:あなたがしたい場合https://github.com/LittleNooby/gbd2015-2016/blob/master/tintin_description
:https://github.com/LittleNooby/gbd2015-2016/blob/master/tintin_schema.png
テーブルの内容
にdb_init:https://github.com/LittleNooby/gbd2015-2016/blob/master/tintin_ok.mysql
アルバムテーブルのサンプルデータを見たいと思います。なぜあなたはこれをしたいのですか? –
を最適化し、後で使用できるかどうかを知ることができます。 (明らかにこのデータベースはエクササイズ用です) "テーブルの内容"へのリンクを投稿するために投稿を編集しました –
テキストファイルにリンクする代わりにsqlfiddleを作成した場合に役立ちます。 – Barmar