繁体   English   中英

存储过程在列名上引发错误

[英]Stored Procedure throwing errors on Column Name

delimiter $$

drop procedure if exists getEmptySeats $$
create procedure getEmptySeats(flight_number char(5),flight_date date)
begin
  select seatingID as Seats, concat(Seats.rowNumber, Seats.seatNumber) as Seat
  from Seating
  where
    aircraftID = aircraft_id and 
    seatID not in 
      ( Select seatID from Seating
        inner join Seats on Seating.seatID = Seats.seatID
        inner join Booking on Seating.bookingNumber = Booking.bookingNumber
        inner join Flights on Booking.flightCode = Flights.flightCode
        inner join FlightSchedule on Flights.flightNumber = FlightSchedule.flightNumber
        where flightNumber = flight_number and flightDate = flight_date)
order by seatingID;
end $$  

ORDER BY RAND()
LIMIT 1

delimiter ;

该程序假定是在特定飞机上随机座位。 我不知道出什么问题了,我已经在互联网上搜索了很长时间,却找不到任何有用的东西。

当我调用该过程时,它给出以下信息: Error Code: 1054. Unknown column 'Seats.rowNumber' in 'field list'

这是席位表:

seatID INT(11)
rowNumber TINYINT(4)
seatNumber CHAR(1)
seatPlacement VARCHAR(15)
plainID CHAR(6)

您需要将其与Seats表一起加入。 不能直接访问用作子查询的子查询

正如@Madhivanan提到的那样,您需要将其与Seats表一起加入。 还有一些模棱两可的列需要修复(通常使用表名前缀是最简单的答案,除非您为表指定别名)

delimiter $$

drop procedure if exists getEmptySeats $$
create procedure getEmptySeats(flight_number char(5),flight_date date)
begin
    select seatingID as Seats, concat(Seats.rowNumber, Seats.seatNumber) as Seat
        from Seating
        inner join Seats on Seating.seatID = Seats.seatID
        where
            aircraftID = aircraft_id and 
            seating.seatID not in 
              ( Select seating.seatID from Seating
                inner join Seats on Seating.seatID = Seats.seatID
                inner join Booking on Seating.bookingNumber = Booking.bookingNumber
                inner join Flights on Booking.flightCode = Flights.flightCode
                inner join FlightSchedule on Flights.flightNumber = FlightSchedule.flightNumber
                where Flights.flightNumber = flight_number and flightDate = flight_date)
        order by seatingID;
end $$  

ORDER BY RAND()
LIMIT 1

delimiter ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM