0

SQL DB があり、php を使用してアクセスしています。

私のテーブルは次のようになります。

フライト テーブル フライト ID、時刻、空港

座席表 フライトID、座席番号

次のクエリがあります。

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' FROM flights f, seats s  GROUP BY f.FlightID

アウトプットをしたい

予約されたフライト ID 座席数

ID 座席数

問題は現在、これを示しています:

[{"ID":"0","Seats Booked":"37"},{"ID":"1234","Seats Booked":"37"}] (The output is JSON encoded)

あなたが私についてくれば、それはいつ10時と27時くらいになるべきですか?正しく結合されていないようです。

単なる答えではなく、何が間違っているのかを説明してください。

ありがとう!

4

4 に答える 4

3

LMC、

句を使用して結合を作成しませんでした。そのため、グループ化された各命令の合計が得られます。

構文を使用した正しい命令は次のようになります。

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f, seats s  
where s.FlightId = f.FlightId
GROUP BY f.FlightID

内部結合構文を使用すると、次のようになります。

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f
inner join seats s  
on  s.FlightId = f.FlightId
GROUP BY f.FlightID

フライトテーブルを使わなくてもできます。フライト ID のグループを返しているため、フライト テーブルに違いはありません。また、テーブル席にはフライト ID があります。以下のステートメントで十分です。これは、座席が予約されていないフライトを気にしない場合に当てはまります。

SELECT s.FlightID 'ID', Count(*) 'Seats Booked' 
FROM seats s  
GROUP BY s.FlightID

座席が予約されていないフライトを表示したい場合は、左結合をフライトに使用する必要があります。以下のステートメントは、この問題を解決します。

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f
left join seats s  
on  s.FlightId = f.FlightId
GROUP BY f.FlightID
于 2013-04-24T18:07:25.703 に答える
2

フライト テーブルのフライト ID 以外のものが必要ない場合は、次のようにしてください。

SELECT s.FlightID, COUNT(s.id) FROM Seats s GROUP BY s.FlightID

座席のないフライトも計算する必要がある場合は、次を使用します。

SELECT f.flightID, COUNT(s.id) FROM フライト f LEFT JOIN 席 s ON s.flightID=f.flightID GROUP BY f.flightID

于 2013-04-24T18:13:13.840 に答える