【问题标题】:MySQL Inner Join problem - what am I doing wrong?MySQL内部连接问题 - 我做错了什么?
【发布时间】:2019-11-17 18:09:22
【问题描述】:

我正在为酒店预订系统构建一个数据库,并且我正在尝试创建一个内部连接来将我的属性链接到设施。我只是想展示什么物业有什么设施。谁能告诉我哪里出错了?一直在尝试不同的变化无济于事。这里的第一段代码我收到了错误消息 #1066 - 不是唯一的表/别名(对于我在“FROM”中引用的任何表,它都这么说)

SELECT DB_Property.Name, DB_Facilities.Facility, DB_PropertyFacilities.PropertyID
FROM DB_Property
INNER JOIN DB_Property ON DB_Facilities.Facility = DB_Property.Facility
INNER JOIN DB_Facilities ON DB_PropertyFacilities.FacilitiesID = DB_Facilities.FacilitiesID
WHERE DB_Property.Name = 'The Ampersand Hotel';

对于以下尝试,我收到错误消息 #1054 - 'on Clause' 中的未知列 'DB_PropertyFacilities.FacilitiesID'

SELECT DB_Property.Name FROM DB_Property
INNER JOIN DB_Facilities ON DB_PropertyFacilities.FacilitiesID = DB_Facilities.FacilitiesID
WHERE DB_Property.Name = 'The Ampersand Hotel'

我今天早些时候成功地创建了一个内部联接,但我无法获得这个让我发疯。有人可以帮忙吗?

【问题讨论】:

  • 为什么DB_PropertyFROMINNER JOIN 中都有两次?
  • 什么是DB_PropertyFacilities

标签: mysql sql join inner-join


【解决方案1】:

正如 Barmar 所评论的,您的第一次尝试有两次 DB_Property,一次在 SELECT 一次在 JOIN。这看起来不对,您可能需要修复此查询。

在您的第二次尝试中,表别名 DB_PropertyFacilities 未在您的查询中定义。你可能指的是DB_Property

SELECT DB_Property.Name 
FROM DB_Property
INNER JOIN DB_Facilities ON DB_Property.FacilitiesID = DB_Facilities.FacilitiesID
WHERE DB_Property.Name = 'The Ampersand Hotel'

我还建议使用表别名来使查询更具可读性:

SELECT p.Name 
FROM DB_Property p
INNER JOIN DB_Facilities f ON p.FacilitiesID = f.FacilitiesID
WHERE p.Name = 'The Ampersand Hotel'

【讨论】:

  • 这和DB_Property不给别名使用两次的问题是一样的,所以是模棱两可的。
【解决方案2】:

您错过了与DB_PropertFacilities 的联接。

SELECT p.Name, f.Facility, p.PropertyID
FROM DB_Property AS p
INNER JOIN DB_PropertFacilities AS pf ON pf.PropertyID = p.PropertyID
INNER JOIN DB_Facilities AS f ON f.FacilitiesID = pf.FacilitiesID
WHERE p.Name = 'The Ampersand Hotel';

【讨论】:

  • 非常感谢您的帮助!我能问一下'p'和'f'是什么吗?它们是捷径吗?我以前从未见过它们(MySQL 新手),但很高兴 - 这非常有效!
  • 它们被称为别名,它们允许您在查询中使用短名称,因此您不必重复像 DB_PropertiesFacilities 这样的长名称。
猜你喜欢
  • 1970-01-01
  • 2014-03-12
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2016-08-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多