0

このクエリを構造化する適切な方法を理解できないようです。純粋なSQLを使用してそれを行う方法があることを知っており、アプリケーションロジックよりも適切なクエリを介して行う方がよいでしょう。

私は3つのテーブルを持っています:

event_types、booking_types、およびbookings

私が欲しいのは、特定のイベントの予約数を取得することですが、予約がゼロのイベントタイプの行も含めます。

SELECT et.name AS test_type, COUNT(et.name) AS num_seats FROM event_types AS et
LEFT OUTER JOIN booking_types AS bt ON et.type_id = bt.event_type_id
LEFT OUTER JOIN bookings AS b ON b.booking_id = bt.booking_id
WHERE b.event_id = 5
GROUP BY test_type

このクエリは次のようなものを返します

test_type | num_seats
----------------------
Transcript |     4
----------------------
Written    |     1
----------------------

現在、event_typesには、「Transcript」、「Written」、および「Skill」の3つがあります。

「スキル」の予約はまだないので(予約には複数のタイプがあります)、結果に「スキル」のような行を含める必要があります。0.また、予約がない場合は、event_typeごとに1つずつ、合計3つのゼロ行が必要です。

あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

2

WHEREフィルタをJOIN:に移動してみてください

SELECT et.name AS test_type, 
    COUNT(b.booking_id) AS num_seats 
FROM event_types AS et
LEFT OUTER JOIN booking_types AS bt 
    ON et.type_id = bt.event_type_id
LEFT OUTER JOIN bookings AS b 
    ON b.booking_id = bt.booking_id
    AND b.event_id = 5
GROUP BY test_type

SQL FiddlewithDemoを参照してください

于 2013-01-10T16:55:47.670 に答える