3

你们能帮我理解加入的 SQL 规范吗?我不明白。我不断收到错误,称为 on 子句上的 Unknown column list。我在我的 SQL 语法上遇到了这个错误,我几乎把它擦在了脸上在这里做错了。

select product.name , product.price from product inner join product_category on          
(product_category.product_no = product.product_no ) where product_category.sub_category = 
"COFFIN";

我知道这个问题已经在这里被问了亿万次了,但是我看到的那些在这个非常基本的 sql 语法中很复杂。

谢谢你的协助。

编辑:我刚刚意识到我的 product_category 不是我的产品表的直接孩子,所以我只是输入了

 select * from product 
 join specifications 
 join product_category on ( specifications.product_no = product_category.product_no);

但这仍然给了我一个错误,未知列product_category。

我已阅读并遵循与此站点类似的一些说明: MYSQL unknown Clause join column in next join Unknown column {0} in on Clause MySQL "Unknown Column in On Clause"

我真的很沮丧。我真的无法让它工作。

4

4 回答 4

4

对于您在查询中加入的每个新表,每个表必须至少有一个 ON 子句。在不知道架构(表名、列等)的情况下,很难确切知道您要做什么,但这里有一个示例

select *
from product p
join specifications s
    on p.product_no = s.product_no
join product_category pc
    on pc.spec_no = p.spec_no

也可以查看有关表别名的链接。给出了一个关于连接的好例子 + 关于如何提高 SQL 可读性的非常有用的信息 http://msdn.microsoft.com/en-us/library/ms187455(v=sql.90).aspx

我发现这篇文章很有用,它直观地显示了不同类型的连接 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2013-02-16T19:17:43.057 回答
1

您缺少指定产品和规格之间的连接条件的部分。

select * from product 
join specifications YOU NEED SOMETHING HERE
join product_category on etc
于 2013-02-16T19:08:38.237 回答
1

我将 SQL 语法修改为如下所示,我忽略了将 product_category 连接到规范的键,因此我创建了必要的链接并且它起作用了!!!

SELECT *
FROM product
JOIN specifications ON ( product.product_no = specifications.product_no )
JOIN product_category ON ( specifications.spec_no = product_category.spec_no )
WHERE product_category.sub_category = "COFFIN"
LIMIT 0 , 30

还要感谢您对规格上缺少连接条件的提醒。哎呀,这种粗心大意花费了很多时间。太感谢了!

于 2013-02-16T19:18:03.933 回答
1

默认连接类型是inner join. 所以如果你写join,数据库读inner join,并坚持你包含一个on子句。

如果您想无条件加入,请cross join明确指定:

 select  * 
 from    product p
 cross join 
         specifications s
 inner join 
         product_category pc 
 on      pc.product_no = p.product_no
 left join
         some_other_table sot
 on      1=1

最后一个加入on 1=1条件,是另一种方法cross join。它的细微差别在于,即使右表为空,它也会从左表返回行。

SQL Fiddle 的示例。

于 2013-02-16T19:21:20.427 回答