私はフライトテーブルと予約テーブルを持っています。MySQL - 関係が存在する場所を追加する、存在しない場合は無視する
フライトが列を持っている、max_passengers
航空券の予約がflight_id
を参照の予約テーブルのように、私はlaravel/PHPでこれを使用していますが、そのために、私は実際のSQLのヘルプを探しています持っています私は現在、飛行を照会し、max_passengers
からこの番号をsumtractingが、どのように私はないSQLを書くことができ、その後sum(bookings.places_booked)
を使用することにより、左空き場所の数をうまくすることができますビット愚か私を運転:
- はランダムの予約はこのフライト和に対して計上場所の量であり、どこ< max_passengers
を追加した場合、私はこの部分を行うことができますが、何の予約はに対して行われていないので、もしどのようにあなたがそれを作ることができ、飛行
フライトテーブルにfree_places
の列を追加することを考えましたが、現在の設定で回避される問題が発生します。
SELECT flights.*, bookings.*
FROM flights
LEFT JOIN bookings ON flights.id = bookings.flight_id
WHERE sum(bookings.places_booked) < flights.max_passengers
GROUP BY flights.id
ORDER BY flights.id ASC
この
は私がachiveしようとしているものですが、私が言ったように私が作る方法を知らない参加/どこオプショナルので何の関係が存在しないところ、それはチェックについては重要ではありません。EDIT(最終SQL):
SELECT flights.*, bookings.*
FROM flights
LEFT JOIN bookings ON flights.id = bookings.flight_id
GROUP BY flights.id
HAVING COALESCE(sum(bookings.places_booked),0) < flights.max_passengers
ORDER BY RAND()
LIMIT 1