我的sql语句遇到了一些麻烦。
以下是相关表格的图片:
一个产品可以属于多个类别。
单个产品可以具有多个类别(例如:尺寸,颜色等)
一个杂类可以有多个杂类选项(即:小,中,大)
表searchcriteria.criterianame松散地与variantcategory.category相关
表searchcriteriaoption.criteriaoption松散地与variantcategoryoption.descriptor相关。
我得到了searchcriteria.criterianame并将该字符串用作我们要与sortecategory.category匹配的值,我们还必须获取各种searchcriteriaoption.criteriaoption字符串(针对该searchcriteria.criterianame),并将其与对该sortsortgory的sortategoryoption.descriptor进行匹配。类别。
这是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'))
)
但我得到一个错误:
“子句”中的未知列“ varietycategory.id”
我试图弄清楚我在做什么错。我尝试简化查询(只是尝试确定sql查询的哪个部分导致了问题),使其仅将searchcriteria.category字符串与variantcategory.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');
但是我还需要能够与variantcategory选项相匹配。
为避免混淆,我仅使用searchcriteria来获取字段类别并将其用作字符串以与sortedcategory.category进行匹配
并且我仅使用searchcriteriaoption来获取字段条件option并将其用作字符串以与variantcategoryoption.descriptor匹配
有人知道我的第一个查询做错了什么吗?
请帮助,因为SQL不是专业知识。
谢谢!
最佳答案
错误是在:
OR
(varietycategory.category = 'size' (varietycategoryoption.desciptor = 'small' OR varietycategoryoption.descriptor='medium'))
^
|
An operator (AND, OR) is missing here
顺便说一下,这与连接语法无关。
关于mysql - 复杂SQL查询条件中的语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25656473/