2011-04-25 16 views
0

私は2つのテーブル、eventsticketsを持つデータベースを持っています。 eventsテーブルにはイベントの行が含まれ、ticketsのチケットがそれぞれ販売されています。例えばMySQL - イベントで販売されたチケットを数えようとしています

events 
------ 
id name capacity 
1 Test 10 
2 Test2 20 
3 Test3 15 

tickets 
------- 
id event_id customer_id 
1 1  (value here doesn't matter) 
2 1 
3 3 
4 1 
5 3 

だから私は、イベント#1から3枚のまでのチケットは、イベント#2に、0のチケットを販売してきた、とイベント#3から2枚のチケットが販売されていることがわかります。

すべてのイベントを選択するクエリと、チケット容量より少ないイベント容量である列availableを作成しようとしています。

私はこのクエリを持っている:

SELECT 
events.id, 
events.name, 
events.capacity, 
events.capacity - COUNT(tickets.id) AS available 
FROM 
events 
INNER JOIN tickets ON events.id = tickets.event_id 

しかし、これはチケットはまだ販売されてやりなさいすべてのイベントを返しません。私はそれが参加のタイプかもしれないと思ったが、成功しなかった様々なものを試した。

どこが間違っているのか分かりません。

答えて

2

あなたはほとんどそこにいるだけleft joininner joinを変更します。

SELECT events.id, 
,  events.name 
,  events.capacity 
,  events.capacity - COUNT(tickets.id) AS available 
FROM events 
LEFT JOIN 
     tickets 
ON  events.id = tickets.event_id 
group by 
     events.id, 
,  events.name 
,  events.capacity 

MySQLはそれを必要としませんが、それはgroup by句で明示的にすべての非集計列を一覧表示することをお勧めします。

+0

ありがとう、ありがたいです。左への参加を試してみましたが、追加したときにそれを機能させる部分でグループを逃しました。 – Josh

0

これは結合である必要があります。内部結合の代わりに左結合を試してください

関連する問題