我有一张名为"客户"的表。它包含一个名为" 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但我仍然收到错误。
为什么我收到错误 - 我做错了什么?
非常感谢!
答案 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连接。
希望您和其他一些答案在未来的查询中有所帮助。