SQL交集-语法错误
我正在寻找从伦敦起飞到巴黎的航班。有关城市的信息位于机场表中,而出发机场和到达机场的缩写词位于航班中 以下是我的问题代码:SQL交集-语法错误,sql,hsqldb,intersect,libreoffice-base,Sql,Hsqldb,Intersect,Libreoffice Base,我正在寻找从伦敦起飞到巴黎的航班。有关城市的信息位于机场表中,而出发机场和到达机场的缩写词位于航班中 以下是我的问题代码: SELECT flightNo,flightCompany FROM Flight JOIN Airport ON Airport.airportId=Flight.depAirport WHERE Airport.city='London' INTERSECT SELECT flightNo,flightCompany FROM Flight JOIN Airport
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错误代码:SQL语句中出现1000语法错误
- SQL状态:HY000错误代码:1000
- SQL状态:HY000错误代码:1000语法错误,意外$end,应介于或之中或类似SQL
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';
或者,使用存在
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'
);
使用
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';
或者,使用存在
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'
);
使用默认的libreofficebase/hsqldb1.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';
使用默认的libreofficebase/hsqldb1.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';
您使用的是哪种DBMS?我使用的是LibreOffice这是一种客户端/前端工具,但您使用的是哪种DBMS?语法错误是什么?例如,您使用的是哪种DBMS?我使用的是LibreOffice这是一种客户端/前端工具,但您使用的是哪种DBMS?语法错误是什么?这些可能是一些示例,我知道这可能是如何工作的,但由于某些原因,它没有输出任何结果(应该显示机场的组合)。我不确定是否应该在第二个代码中更改任何内容,因为我对SQL有些陌生,但复制并按编写方式运行它会出现错误-无法加载数据内容,在语句中找不到表。@Sick0ne。第二个问题是“机场”。也许您的数据库对表名是区分大小写的。谢谢您的回答。第二个查询按预期工作。尽管如此,还是决定使用以下选项:
从F航班、A1机场、A2机场中选择F.flightNo、F.FlightCompany,其中(F.depAirport=A1.Airport和A1.city='London')和(F.arrAirport=A2.Airport和A2.city='Paris')
@Sick0ne。您应该学会使用正确的显式JOIN
语法:在FROM
子句中永远不要使用逗号。我知道这可能是如何工作的,但由于某种原因它不会输出任何结果(应该显示机场的组合)。我不确定是否应该在第二个代码中更改任何内容,因为我对SQL有些陌生,但复制并以写入方式运行它会出现错误-无法加载数据内容,在语句中找不到表。@Sick0ne。第二个问题是“机场”。也许您的数据库对表名是区分大小写的。谢谢您的回答。第二个查询按预期工作。尽管如此,还是决定使用以下选项:从F航班、A1机场、A2机场中选择F.flightNo、F.FlightCompany,其中(F.depAirport=A1.Airport和A1.city='London')和(F.arrAirport=A2.Airport和A2.city='Paris')
@Sick0ne。您应该学会使用正确的显式JOIN
语法:在FROM
子句中不要使用逗号。请参阅,这是Libre Office自动为您做的。如果你保存一个文件,它会自动添加引号——如果你再次打开你的查询,它会这样看。最后决定继续(是的,戈登的第二个代码是有效的):从F航班、机场A1、机场A2中选择F.flightNo、F.FlightCompany,其中(F.depAirport=A1.airportId和A1.city='London')和(F.arrAirport=A2.airportId和A2.city='Paris')
这是Libre Office自动为您做的。如果你保存一个文件,它会自动添加引号——如果你再次打开你的查询,它会这样看。最后决定继续(是的,戈登的第二个代码是有效的):从F航班、机场A1、机场A2中选择F.flightNo、F.FlightCompany,其中(F.depAirport=A1.Airport和A1.city='London')和(F.arrAirport=A2.Airport和A2.city='Paris')