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

如何改用 s 重写查询JOIN

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';

或者更好的是,将 Gordon 的答案修改如下:

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 回答