0

ロンドン発パリ着のフライトを検索しています。都市に関する情報は Airport テーブルにあり、出発空港と到着空港の略語は Flight にあります。

問題のコードは次のとおりです。

SELECT flightNo,flightCompany
FROM Flight
JOIN Airport
ON Airport.airportId=Flight.depAirport
WHERE Airport.city='London'

INTERSECT

SELECT flightNo,flightCompany
FROM Flight
JOIN Airport
ON Airport.airportId=Flight.arrAirport
WHERE Airport.city='Paris';

3 つのエラーを返します -

  • SQL ステータス: HY000 エラー コード: 1000 SQL ステートメントの構文エラー
  • SQL ステータス: HY000 エラー コード: 1000
  • SQL ステータス: HY000 エラー コード: 1000 構文エラー、予期しない $end、BETWEEN または IN または SQL_TOKEN_LIKE が必要です
4

2 に答える 2

3

JOIN代わりに sを使用してクエリを書き直してはどうでしょうか。

SELECT f.flightNo, f.flightCompany
FROM Flight f JOIN
     Airport ad
     ON ad.airportId = f.depAirport AND ad.city = 'London' JOIN
     Airport aa
     ON aa.airportId = f.arrAirport AND aa.city = 'Paris';

または、EXISTS?

SELECT f.*
FROM Flight f
WHERE EXISTS (SELECT 1
              FROM Airport ad
              WHERE ad.airportId = f.depAirport AND ad.city = 'London'
             ) AND
      EXISTS (SELECT 1
              FROM Airport aa
              WHERE aa.airportId = f.arrAirport AND aa.city = 'Paris'
             );
于 2016-02-21T22:58:25.617 に答える
1

デフォルトの LibreOffice Base / HSQLDB 1.8 セットアップを使用した引用規則と大文字と小文字の区別は注意が必要です。これがあなたがする必要があることです:

SELECT "flightNo","flightCompany"
FROM "Flight"
JOIN "Airport"
ON "Airport"."airportId"="Flight"."depAirport"
WHERE "Airport"."city"='London'
INTERSECT
SELECT "flightNo","flightCompany"
FROM "Flight"
JOIN "Airport"
ON "Airport"."airportId"="Flight"."arrAirport"
WHERE "Airport"."city"='Paris';

または、ゴードンの答えを次のように変更します。

SELECT F."flightNo", F."flightCompany"
FROM "Flight" F JOIN
     "Airport" AD
     ON AD."airportId" = F."depAirport" AND AD."city" = 'London' JOIN
     "Airport" AA
     ON AA."airportId" = F."arrAirport" AND AA."city" = 'Paris';
于 2016-02-22T23:21:14.883 に答える