我的头衔可能不是最具说明性的。
所以我会进一步解释我的问题。
我有四张桌子:
Category
- idCategory varchar(100) COLLATE utf8_bin NOT NULL
- idMerchant int(11) NOT NULL
- parentCategory varchar(100) CHARACTER SET utf8 DEFAULT NULL
- level int(11) NOT NULL <-- here the data represent the level of the category
- label varchar(100) CHARACTER SET utf8 NOT NULL
- PRIMARY KEY (`idCategory`,`idMerchant`),
Product
- idProduct int(11) NOT NULL AUTO_INCREMENT
- idCategory varchar(100) NOT NULL
- description varchar(100) DEFAULT NULL
- label varchar(100) DEFAULT NULL
- PRIMARY KEY (`idProduct`)
ProductAttribute
- idProduct int(11) NOT NULL
- idAttribute int(11) NOT NULL
- PRIMARY KEY (`idProduct`,`idAttribute`)
Attribute
- idAttribute int(11) NOT NULL
- code varchar(100) DEFAULT NULL
- label varchar(100) DEFAULT NULL
- PRIMARY KEY (`idAttribute`)
我的目标是通过类别及其子类别获取数据。每个子类别都有自己的产品,最后每个子类别都有多个属性。
SELECT pc.label, pc.level, c.label as 'C_label', c.level, p.label as 'P_label', a.label as 'A_Label'
FROM `Category` c join `Product` p using(idCategory)
JOIN `ProductAttribute` using(idProduct)
JOIN `Attribute` a using(idAttribute)
JOIN (
Select idCategory, label
FROM Category Where level = 1 and idMerchant = 65
) as pc
ON c.parentCategory=pc.idCategory WHERE idMerchant = 65
我的期望是找到这样的桌子:
label | level | C_label | level | P_label | A_Label
Boy | 1 | Watch | 2 | Brand | Festina
... | 1 | Watch | 2 | Brand |Pequignet
... | ... | ... | ... | ... | ...
Girl | 1 | Watch | 2 | Brand |Bell & Ross
...
等...
但结果是这样的:
label | level | C_label | level | P_label | A_Label
Boy | 1 | Watch | 2 | Size |Bell & Ross
... | 1 | Watch | 2 | Size | Burton
... | ... | ... | ... | ... |Coca-Cola <-- I have some brand which are not related with the category
Girl | 1 | Watch | 2 | Size | Swiffer <-- Other example
...
对于此示例,许多品牌按字母顺序列出,但与相关产品无关。但有时候对于某些属性,产品的属性是显而易见的,比如仅列出分辨率的电视。
那么你能告诉我为什么查询不正确。
感谢。
答案 0 :(得分:0)
我不知道此查询如何无法返回错误,因为除了此谓词外,我没有看到对行源 h
的任何引用:
ON h.parentCode=pc.idCategory
^
我也没有在您列出列名的四个表中看到任何名为 parentCode
的列。我没有看到列的数据类型(任何隐式数据转换?),任何键定义(主键,唯一键,外键)。没有足够的信息来进一步诊断查询问题。
有时,&#34;错误的结果&#34;您报告的类型是表中值的问题。为了诊断这一点,我们修改查询以包括SELECT列表中JOIN谓词中使用的所有PRIMARY KEY列和列。