我在使用我的sql語句時遇到了一些麻煩。複雜SQL查詢條件中的語法錯誤
下面是相關的表的一個圖:
的產品可以在多個類別。 單品可以有多個varietycategories(即:尺寸,顏色,等等) 一個varietycategory可以有多個varietycategoryoptions(即:小,中,大)
表searchcriteria.criterianame鬆耦合涉及varietycategory.category
表searchcriteriaoption.criteriaoption鬆散地關聯到varietycategoryoption.descriptor。
我得到了searchcriteria.criterianame,並使用該字符串作爲我們想要與varietycategory.category匹配的值,我們還必須獲得各種searchcriteriaoption.criteria選項字符串(針對該searchcriteria.criterianame)並將其與針對varietycategory選項進行匹配。描述符爲那個varietycategory.category。
這裏是SQL:
SELECT DISTINCT categories.*, product.*
FROM (categories, product, product_category)
LEFT JOIN varietycategory ON varietycategory.productid = product.id
LEFT JOIN varietycategoryoption ON varietycategoryoption.varietycategoryid = varietycategory.id
WHERE product_category.categoryid=4
AND product.id=product_category.productid
AND categories.category_id=product_category.categoryid
AND (
(varietycategory.category = 'color' AND (varietycategoryoption.descriptor='red' OR varietycategoryoption.descriptor='blue'))
OR
(varietycategory.category = 'size' AND (varietycategoryoption.descriptor = 'small' OR varietycategoryoption.descriptor='medium'))
)
,但我得到一個錯誤:
Unknown column 'varietycategory.id' in 'on clause'
我試圖找出我做錯了。我嘗試簡化查詢(僅嘗試確定sql查詢的哪個部分導致問題),只將searchcriteria.category字符串與varietycategory.category匹配,並且查詢返回正確的數據集。 這裏是工作的查詢(此查詢簡化和不足):
SELECT DISTINCT categories.*, product.*
FROM (categories, product, product_category)
LEFT JOIN varietycategory ON varietycategory.productid = product.id
WHERE product_category.categoryid=4
AND product.id=product_category.productid
AND categories.category_id=product_category.categoryid
AND (varietycategory.category = 'color' OR varietycategory.category = 'size' OR varietycategory.category='shape');
但我也需要能夠匹配對varietycategoryoptions爲好。
只是爲了避免混淆,我只使用searchcriteria獲取字段類別並將其用作字符串來匹配varietycategory.category ,我只使用searchcriteriaoption獲取字段criteriaoption並將其用作字符串以匹配與varietycategoryoption.descriptor
有誰知道我在做什麼錯我的第一個查詢? 請幫忙,因爲SQL不是專業知識。
謝謝!
謝謝你的回覆。感謝您的建議,我添加了AND運算符。 sql錯誤現在已經改變,我相信它現在確實與連接語法有關。 – 2014-09-04 03:38:42