表上的内连接不直接相关

时间:2014-11-04 13:17:41

标签: sql sql-server inner-join

好的,所以我有三个包含这些字段的表(当然还有更多不相关的表):

full_table
属性
条款ArticleID

MAIN_TABLE
articleID

other_table
属性

所以在full_table中有" articleID"的完整列表。及其相关的属性"。在main_table中只有一些articleID。在other_table中只有一些"属性"。

我想要的只是那些属性在other_table中并且其articleID在main_table中的文章。

编辑:描述的一些视觉帮助

problem description

问题是我的查询还返回了很多不在other_table中的内容。

查询如下:

SELECT full_table.attribute, main_table.articleID FROM main_table
INNER JOIN full_table ON full_table.articleID = main_table.articleID 
INNER JOIN other_table ON other_table.attribute = full_table.attribute

EDIT2:我已经测试了sql小提琴上的示例图片和代码并按照需要工作,因此问题必然来自真实查询的复杂性增加,我将继续研究问题的根源。

3 个答案:

答案 0 :(得分:0)

请提供外键关系,因此示例更清晰。但是,乍一看,你能做点什么:

SELECT ot.attribute,
       ft.articleId
FROM other_table ot
INNER JOIN full_table ft ON ot.attribute = ft.attribute;

答案 1 :(得分:0)

根据我的理解。

DECLARE @full_table TABLE (articleID INT, attribute NVARCHAR(100))
DECLARE @main_table TABLE (articleID INT)
DECLARE @other_table TABLE (attribute NVARCHAR(100))

INSERT INTO @full_table VALUES (1,'attrib1'),(2,'attrib2'),(3,'attrib3'),(4,'attrib4'),(5,'attrib5')
INSERT INTO @main_table VALUES (2),(3),(5)
INSERT INTO @other_table VALUES ('attrib1'),('attrib2'),('attrib5')

SELECT a.* FROM @full_table as a
INNER JOIN @other_table as b ON a.attribute = b.attribute

答案 2 :(得分:0)

所以问题是它每次返回相同的行3次,因此混淆了我因为行数比预期的要大得多。但该查询正在适当过滤。

通过向所有选定项目添加GROUP BY来解决此问题。

解决方案是:

SELECT full_table.attribute, main_table.articleID FROM main_table
INNER JOIN full_table ON full_table.articleID = main_table.articleID 
INNER JOIN other_table ON other_table.attribute = full_table.attribute
GROUP BY full_table.attribute, main_table.articleID