使用JOIN和HABTM关联加入三个表

时间:2014-04-14 11:50:14

标签: mysql sql

我有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 table picture

因此,当您看到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行。

1 个答案:

答案 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