我有3个表项,特征,item_to_characteristics,其中item_to_characteristics是一个中间表,它保持2个表(项< - >特征)之间的HABTM关联。
项目表有 id | title | description
特征表有 id | name | pic_path
item_to_characteristic有 id | item_id | characteristic_id
所以例如:对于id为25的项目,我想找到它的所有特征。
table item_to_characteristics如下所示:
因此,当您看到item_to_characteristic保存项目的ID及其特征时。
这是我到目前为止所写的查询,但它会返回我想要的内容,
SELECT item_characteristics.name, item_characteristics.icon_path
FROM item_characteristics, item_to_characteristics as itch INNER JOIN items
ON items.id=itch.item_id
WHERE items.id=25;
查询应该只返回5行。
答案 0 :(得分:2)
您已加入表格item_to_characteristics
这就是为什么您获得的行数超出预期。相反,你应该加入item_to_characteristics
SELECT ic.name, ic.icon_path
FROM item_characteristics ic
INNER JOIN item_to_characteristics as itch
ON itch.characteristic_id = ic.id
INNER JOIN items
ON items.id=itch.item_id
WHERE items.id = 25;
这是我总是建议使用ANSI 92 Join语法的原因之一,而不是您上面使用的ANSI 89语法。 Aaron Bertrand也提出了一个非常有说服力的案例来转换this article。