MySQL离开加入未知列

时间:2015-06-17 22:20:58

标签: php mysql join left-join

我一直收到错误:

1054 - 未知栏' A.AccomodationID'在' on子句'

SELECT E.LastName, A.PUPoint, A.AccomodationID, P.pickup_Time, P.order_No
FROM ACCOMMODATION AS A, ENTITIES AS E
LEFT JOIN Pickup_Times AS P ON A.AccomodationID = P.AccomodationID
WHERE A.Entity_ID = E.Entity_ID
AND P.tour_ID = '11'
ORDER BY P.pickup_Time, P.order_No, E.LastName

我不确定如何解决此问题,因为SQL连接不是我的强项。我需要匹配ACCOMMODATION和ENTITIES表,因为它们结合了重要信息。然后我需要加入一个新表,如果这是可能的话,那就是Pickup_Times表。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可能已经根据评论解决了这个问题,但是让我试着提供这个来帮助你将来。编写查询时,您可以将多个表中的旧表混合为逗号分隔,然后添加左连接。我强烈建议把这些表格的标准放在JOIN条款中,不要混合为/ where。此外,您在新的pickup_times表中添加了一个左连接,但随后将AND P.tour_id子句添加到了实质上将其转换回INNER JOIN的位置...这意味着它只会返回存在于其中的记录。取件时间表。不知道这是不是你的意思。

这是一个重组的查询,也用于可读性嵌套缩进以显示表A->的关系。 B和B-> C(等......根据需要)。您可以将JOIN和辅助条件的条件直接添加到join子句中,并根据您的主(第一个)表添加WHERE子句条件......类似于。

SELECT 
      E.LastName, 
      A.PUPoint, 
      A.AccomodationID, 
      P.pickup_Time, 
      P.order_No
   FROM 
      ACCOMMODATION AS A
         JOIN ENTITIES AS E
            on A.Entity_ID = E.Entity_ID
         LEFT JOIN Pickup_Times AS P 
            ON A.AccomodationID = P.AccomodationID
            AND P.tour_ID = '11'
   ORDER BY 
      P.pickup_Time, 
      P.order_No, 
      E.LastName

通过将AND P.tour_id作为左连接条件的一部分,无论拾取时间如何,您仍然可以获得所有住宿。如果你只想要那些具有特定拾取时间并且tour = 11的人,那么只需删除" LEFT"加入的一部分。

所以,从上面的缩进中,你可以看到两个"实体"和" Pickup_Times"与" Accommodations"直接相关并且尊重每个别名。查询的可读性对于您的学习和写作都很重要,但对于那些跟随您的人来说,您可能已经离开了。