【问题标题】:TRYING TO JOIN THESE TABLES but getting Error Code: 1052. Column 'Flight_no' in field list is ambiguous [duplicate]尝试加入这些表但得到错误代码:1052。字段列表中的列“Flight_no”不明确[重复]
【发布时间】:2016-12-02 20:18:11
【问题描述】:

我正在尝试加入两个表,但得到“错误代码:1052。字段列表中的列 'Flight_no' 不明确”。有人可以帮帮我吗?

这是我的查询:

SELECT Flight_no, Airline_code. Lname, Passenger_id
FROM Ticketinfo JOIN  Flights
ON Ticketinfo.Flight_no = Flights.Flight_no;

这是我的桌子上的信息:

CREATE TABLE Flights
(
  Flight_no INT NOT NULL,
  Airline_code char (5) NULL,
  Departure_AirportCode char (5) NOT NULL,
  Departure_date date NOT NULL,
  Arrival_AirportCode char (5) Not NULL,
  Arrival_date date not null,
  Price  decimal (5,2),
  Airline_no INT NOT NULL,
  Route_no varchar (8) NOT NULL,
  PRIMARY KEY (Flight_no),
  FOREIGN KEY (Airline_no) REFERENCES Airlines(Airline_no),
  FOREIGN KEY (Route_no) REFERENCES Routes(Route_no)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


CREATE TABLE TicketInfo
(
  Confirmation_no varchar (10) NOT NULL,
  Lname varchar (30) NOT NULL,
  Passenger_id varchar (6) NOT NULL,
  Fare_type varchar (3) NOT NULL,
  Flight_no INT NOT NULL,
   PRIMARY KEY (Confirmation_no),
  FOREIGN KEY (Passenger_id) REFERENCES Passenger(Passenger_id),
  FOREIGN KEY (Flight_no) REFERENCES Flights(Flight_no)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【问题讨论】:

    标签: mysql database join


    【解决方案1】:

    这是模棱两可的。 Flight_No 在两个表中。

    为字段添加特定表的前缀,如下所示:

    SELECT Flights.Flight_no, Airline_code. Lname, Passenger_id
    FROM Ticketinfo JOIN  Flights
    ON Ticketinfo.Flight_no = Flights.Flight_no;
    

    【讨论】:

    • 谢谢@Chizzie - 问题已解决。
    【解决方案2】:

    由于Flight_no 列出现在两个表中,您需要通过指定您希望Flight_no 列来自哪个表来解决SELECT 中的歧义。由于通过您的联接,两个表中的值相同,因此您选择哪个并不重要。

    SELECT Ticketinfo.Flight_no, Airline_code. Lname, Passenger_id
    FROM Ticketinfo JOIN  Flights
    ON Ticketinfo.Flight_no = Flights.Flight_no;
    

    【讨论】:

    • 嘿乔 - 感谢您的快速响应。我确实从另一篇文章中看到这可能是问题所在。所以我去修改了我的代码,但现在我得到:错误代码:1054。'字段列表'中的未知列'Airline_code.Lname'
    • Nvm Joe 现在可以工作了!非常感谢!
    【解决方案3】:

    使用表名或(我的偏好)短表别名来限定所有列引用。例如:

    SELECT f.flight_no
         , f.airline_code
         , t.lname
         , t.passenger_id
      FROM Ticketinfo t
      JOIN Flights f
        ON f.flight_no = t.flight_no
    

    除了解决“不明确的列”错误,并防止在向表中添加新列时破坏工作语句……这也有助于未来的人类读者。如果列引用不合格,则读者不知道该列在哪个表中,而不是去查找表定义。

    稍后,当将名为 lname 的列添加到 Flights 表中时,查询不会抛出“不明确的列”错误。这就是我们限定所有列引用的原因。

    【讨论】:

    • @Spencer...非常感谢!那行得通。我对此很陌生,并且一直在尝试解决它,但不知道要寻找什么。也感谢您的解释。我已经把你和乔的都存到我的小备忘单上了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多