我有两张桌子。 :机场,FlightSchedule。
他们彼此之间有一对二的关系。
以下是休眠数据文件。
Airport.java:
public class Airport implements java.io.Serializable {
private Integer airportId;
private String airportName;
private String airportCountry;
private String airportCity;
private Set<FlightSchedule> depFlightSchedule = new HashSet<FlightSchedule>(0);
private Set<FlightSchedule> arrFlightSchedule = new HashSet<FlightSchedule>(0);
}
FlightSchedule.java:
public class FlightSchedule implements java.io.Serializable {
private Integer flightscheduleId;
private Date depDay;
private Date depTime;
private Date arrDay;
private Date arrTime;
private Double flightTime;
private Integer price;
private Set<BoardingPass> boardingPasses = new HashSet<BoardingPass>(0);
private Airplane airplane;
private Airport depAirport;
private Airport arrAirport;
}
在FlightSchedule中,他们必须与Airport有两个关系。因为他们需要“出发机场信息”和“到达机场信息”。
因此,如果我得到两个字符串输入(出发机场名称,到达机场名称),我想制作联接表(FlightSchedule X Airport)并打印所有信息。
例如,如果我有两个输入“ Korea”和“ Austrailia”,那么我想打印有关出发韩国,到达澳大利亚的信息。
像这样! :
出发日期|出发机场|到达日期|到达机场
2017-12-01 |仁川国际机场| 2017-12-10 |悉尼国际机场
-出发日期,到达日期来自“ FlightSchedule”表。
-出发机场名称,到达机场名称来自“机场”表。
实际上,我在mysql上尝试过:
SELECT * FROM flight_schedule as f
内联机场
在f.dep_airport_id =((从Airport.country ='korea'的机场中选择ID)上
和f.arr_airport_id =(从其中airport.country ='Austrailia'的机场中选择ID)
但这不是我想要的
有什么解决办法吗?
最佳答案
现在,您要与airport进行联接,但条件是airport同时具有两个不同的值,因此这是不可能的。对于每种条件,您都必须对此表进行两次联接。
SELECT * FROM flight_schedule as f
inner join airport a1
on f.dep_airport_id=(select id from airport where a1.country='korea')
inner join airport a2
on f.arr_airport_id=(select id from airport where a2.country='Austrailia')