0

次の情報を表示したい -

日付フライト | 名前 出発時間 | ビジネスクラスの空室状況 | エグゼクティブクラスの空き状況 | エコノミークラスの空室状況

現在、すべての情報は異なるテーブルにあります

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);
4

3 に答える 3

0

コードのエラーを理解できてよかったです。複数のテーブルからデータをフェッチする限り、Java コードで次のタイプの SQL を使用します。

a.col1、b.col2、c.col3 を選択

table1 を a として、table2 を b として、table3 を c として

ここで、a.col1='abc' および b.col2 は 1 ~ 100 です。

それが役に立てば幸い。

万全の態勢で…!!

于 2013-06-14T17:12:03.710 に答える