私は2つのテーブル、ボードと投票を持っています。MySQL - LEFT JOINを2回使用するには?
create table board (
id int unsigned not null primary key auto_increment,
type varchar(10) not null,
article_id int unsigned,
title varchar(255) not null,
content text not null);
create table vote (
no int unsigned not null primary key auto_increment,
id int unsigned not null
voter_email varchar(255));
ボードテーブルには、記事と返信の2種類のデータが格納され、返信タイプにはarticle_idがあります。
以下のクエリを使用して各記事の返信件数を数えます。
select b.id, b.title, b.content, b2.reply
from board b left join
(select article_id, count(id) as reply from board
where article_id is not null group by article_id)
b2 on b2.article_id = b.id;
+----+-------+---------+-------+
| id | title | content | reply |
+----+-------+---------+-------+
| 10 | uu | uuu | NULL |
| 12 | eee | eeee | 4 |
+----+-------+---------+-------+
そして、以下のクエリを使用して各記事の投票数をカウントできます。
select id, count(*) as vote from vote group by id;
+----+------+
| id | vote |
+----+------+
| 12 | 1 |
+----+------+
これで、2つの結果を1つにマージしようとしています。
どうすればいいですか?
私が期待した結果がこれです:
+----+-------+---------+-------+------+
| id | title | content | reply | vote |
+----+-------+---------+-------+------+
| 10 | uu | uuu | NULL | NULL |
| 12 | eee | eeee | 4 | 1 |
+----+-------+---------+-------+------+
@KimNR - **しない**使用しています相関サブクエリは完全に遅くなる傾向があります。 JOINベースのソリューションを使用します。 – GurV
@ GurVジョインとサブクエリで高速かつ低速なシナリオを見てきましたが、私は通常、最も効果的なものを見つけるためにさまざまなソリューションをテストします。ジョインはこのシナリオでうまくいくかもしれませんが、おそらくMySQLのバージョンと使用されているエンジンにも依存しています。 – mkrmr
@mkrmr見たものは何ですか?あなたの解決策に関するコメントが最適ではないということですか? SQLの世界では、シンプルに思えるかもしれませんが、あなたが望むほど効率的ではないかもしれません。相関クエリが高速である可能性があることを意味するならば、答えはそれほど頻繁ではありません。 – GurV