SQL:问题加入表

时间:2017-02-18 15:24:40

标签: sql-server-2008 duplicates inner-join

我有以下两个表:

attributevalueassign

itm_id  attr_value_id   attr_id
-----   -------------   -------
396     237             1
396     20              2
715     274             1
715     16              2

attributevalue

attr_id   attr_value_id     attr_value
-------   -------------     ----------
1         237               3055020
1         274               2454518
2         16                Dunlop
2         20                Vogue

我需要能够编写一个查询,当我提供item_id时(例如:396),我得到以下结果:

itm_id  attr_value_id   attr_id   attr_value
------  -------------   -------   ----------
396     237             1         3055020
396     20              2         Vogue

当我尝试使用INNER JOIN时,我得到的行数超出了我想要的数量:

SELECT     dbo.select_attributevalue.attr_value, dbo.select_attributevalueassign.itm_id
FROM         dbo.select_attributevalueassign INNER JOIN
                      dbo.select_attributevalue ON dbo.select_attributevalueassign.attr_id = dbo.select_attributevalue.attr_id
WHERE     (dbo.select_attributevalueassign.itm_id = 396)

itm_id  attr_value_id   attr_id  attr_value
------  -------------   -------  ----------
396     237             1        3055020
396     237             1        2454518
396     20              2        Dunlop
396     20              2        Vogue

所以,我的想法是我可能不应该使用JOIN,但我不知道替代方案是什么。我在这个网站上挖掘寻找解决方案,关于如何使用连接删除重复记录有很多问题,但我没有看到类似于我的问题。我对SQL查询的了解很基础,所以我不知道该怎么做。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可能需要通过两列attr_value_idattr_id进行内部联接。试试这个问题:

SELECT     dbo.select_attributevalue.attr_value, dbo.select_attributevalueassign.itm_id
FROM         dbo.select_attributevalueassign 
    INNER JOIN dbo.select_attributevalue ON 
    dbo.select_attributevalueassign.attr_id = dbo.select_attributevalue.attr_id
    AND dbo.select_attributevalueassign.attr_value_id = dbo.select_attributevalue.attr_value_id
WHERE     (dbo.select_attributevalueassign.itm_id = 396)