我有两张桌子。 :机场,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')

09-30 12:12