次の情報を表示したい -
日付フライト | 名前 出発時間 | ビジネスクラスの空室状況 | エグゼクティブクラスの空き状況 | エコノミークラスの空室状況
現在、すべての情報は異なるテーブルにあります
Table sector - sectorID | description | weekday1 | weekday2 | bfare | xfare | efare
Table flights - flightno | deptime | arrtime | aircrafttypeID | sectorID
Table aircraft - aircraftTypeID | description | bseats | xseats | eseats
scheduleID - flightno | flightdate | bcsavailable | xcsavailable | ecsavailable
QUERY : 2013 年 6 月 17 日に予定されている、コルカタからアーメダバードへのフライトでクラスがビジネスのフライトを表示します。
パート 1 - 座席数が 0 を超えていて、出発地と目的地が一致するフライト番号を取得しようとしています。パート 2 - 次に、日付とフライト番号が一致するスケジュールされたフライト テーブルからこれらのレコードをフェッチします。MySQLクエリウィンドウでこのクエリを実行すると正しい出力が得られますが、Javaで同じクエリを実行するとエラーが発生します-
列インデックスが範囲外です。2 > 1。
SQL バージョン
SELECT flightno
FROM flights
WHERE aircrafttypeID
IN (
SELECT aircraftTypeID
FROM aircraft
WHERE aircrafttypeID
IN (
SELECT aircrafttypeID
FROM sector, flights
WHERE source LIKE 'Kolkata'
AND destination LIKE 'Ahmedabad'
AND sector.sectorID = flights.sectorID
)
AND bseats >0)
上記のクエリの出力は、正しい FJA23 および FJA24 2 レコードです。
Java バージョン
String origin=jComboBox3.getSelectedItem().toString();
String target=jComboBox4.getSelectedItem().toString();
String fclass=jComboBox1.getSelectedItem().toString();
String search = "";
if(fclass.equals("Business"))
{
search="AND bseats>0";
}
if(fclass.equals("Executive"))
{
search="AND xseats>0";
}
if(fclass.equals("Economy"))
{
search="AND eseats>0";
}
String sql="SELECT flightno FROM flights WHERE aircrafttypeID IN "
+ "(SELECT aircraft.aircrafttypeID FROM aircraft WHERE aircrafttypeID IN "
+ "(SELECT aircrafttypeID FROM sector,flights WHERE source LIKE '"+ origin
+ "' AND destination LIKE '" + target + "' AND sector.sectorID=flights.sectorID) " + search+")";
System.out.println(sql);