为什么我的数据库看不到此数据库列?

时间:2014-11-28 00:47:39

标签: mysql alias

我有一张名为"客户"的表。它包含一个名为" id"的列。出于一些惊人的原因,我收到了错误:

#1054 - Unknown column 'c.id' in 'on clause'

当我这样做时加入:

SELECT c.co_name, p.name
FROM `customers` as c, `products` as p, `customer_product` as cp
Join `products`
On c.id = cp.customer_id

我也尝试删除别名并写出customers.id但我仍然收到错误。

为什么我收到错误 - 我做错了什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

它可能会失败,因为你正在使用别名和全表...选择一个...此外,你将获得笛卡尔结果,因为你没有任何东西在cp和p表之间绑定..可能的解决方案。

SELECT 
      c.co_name, 
      p.name
   FROM 
      customers c
         JOIN customer_product cp
            on c.id = cp.customer_id
            Join products p
               on cp.product_id = p.id



Clarification per request.

我有一种我喜欢用来做基于SQL的查询的样式。如果您点击我的答案图片(或任何人),它会将您带到他们的个人资料/历史记录中。然后,如果您单击MySQL标记,它将带您到我为MySQL提供的所有答案(或您对我或任何其他用户感兴趣的任何标记)的列表。从那,看看我的答案的样式模式。

我喜欢使用缩进作为表格" A"的视觉表示。与" B"相关从" B"到" C"在这里可以看到。您使用逗号分隔表之间的交叉而没有定义JOIN,然后仅在第三个表上使用连接。这意味着只应用了JOIN条件。

当我进行查询时,我首先列出主表,JOIN到第二个,并立即识别FIRST(左侧)表和SECOND(右侧)表之间的ON条件。由于您有一个链接表(标识客户和产品),因此客户从客户表连接到链接表的第一个标准。所以现在,您需要从链接表到产品表。现在,缩进将产品表进一步移动,现在FIRST(左侧)表是连接到SECOND(右侧)产品表的LINK(customer_products)表。现在是那些之间的ON条件。

现在,A-B和B-C之间建立了关系。

完成此操作后,您可以获取要返回的任何列,然后按条件按顺序应用任何其他条件/组。注意,如果我在其中一个(或更深)级别有其他标准,我会在该位置准确添加标准。这样,在处理左连接条件时,我不会通过将标准放在WHERE子句中而意外地将其转换为INNER连接。

希望您和其他一些答案在未来的查询中有所帮助。