2013-02-16 38 views
2

你們可以幫我理解加入的SQL規範嗎?我不明白。我一直在on子句上收到名爲Unknown列表錯誤。 我得到了這個錯誤在我的SQL語法,我幾乎把它擦在我的臉上我只是不明白爲什麼它不工作,我讀過一些關於它是因爲優先等文章,但我真的很困惑我的東西在這裏做錯了。sql聯接中'on子句'上的未知列?

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"; 

我知道這個問題已經問了hudred這裏萬次,但我看到的那些很複雜,在這個非常基本的SQL語法無處接近。

THanks幫助我。

編輯: 我只是意識到,我有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"

我真的很沮喪。我真的無法讓它工作。

回答

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 

同樣感謝您對規格缺失連接條件的正面評價。這種粗心大意花了這麼多時間。 非常感謝!

1

您錯過了指定產品和規格之間連接條件的部分。

select * from product 
join specifications YOU NEED SOMETHING HERE 
join product_category on etc 
+0

哦,是的,我已經試過了,這一個 SELECT * FROM產品 加入關於規範(product.product_no = specifications.product_no) 加入對PRODUCT_CATEGORY(specifications.product_no = product_category.product_no) ; 它仍然給出了錯誤 – 2013-02-16 19:10:52

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

+0

你的鏈接被添加書籤!精彩!謝謝! +1瞭解模式,我終於做到了,並且完全忽略了將另一個表與另一個表相關聯的重要關鍵。 – 2013-02-16 19:20:20

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。它的細微之處在於它會從左表中返回行,即使右表是空的。

Example at SQL Fiddle.

相關問題