我的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/

10-09 19:47