Sql 不直接相关的表上的内部联接

Sql 不直接相关的表上的内部联接,sql,sql-server,inner-join,Sql,Sql Server,Inner Join,好的,我有三个表,其中包含这些字段(当然还有更多不相关的): 完整表格 属性 文章ID 主表 文章ID 其他表格 属性 所以在full_表中有“articleID”及其相关“attribute”的完整列表。在main_表中只有一些articleID。在另一个表中,只有一些“属性” 我想要的是只获取那些属性在other_表中并且articleID在main_表中的项目 编辑:描述的一些视觉帮助 问题是我的查询还返回了很多不在其他表中的数据 查询如下: SELECT full_table.attr

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

完整表格
属性
文章ID

主表
文章ID

其他表格
属性

所以在full_表中有“articleID”及其相关“attribute”的完整列表。在main_表中只有一些articleID。在另一个表中,只有一些“属性”

我想要的是只获取那些属性在other_表中并且articleID在main_表中的项目

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

问题是我的查询还返回了很多不在其他表中的数据

查询如下:

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 fiddle上测试了示例pic和代码,并按照预期工作,因此问题一定来自实际查询的复杂性增加,我将继续研究问题的来源。

请提供外键关系,以便示例更清晰。但是,乍一看,您是否可以做如下操作:

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

据我所知

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

所以问题是它每次返回相同的行3次,这让我很困惑,因为行的数量比预期的要多。但这个查询过滤得恰到好处

通过向所有选定项目添加分组依据解决了此问题

解决办法是:

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

请编辑您的问题并提供示例数据和所需结果。您的查询似乎符合您的要求:“仅获取属性位于其他表中的文章”。谢谢Gordon,下面是示例和所需结果;)。你应该删除这个问题,因为它是由误会引起的。我不能道歉,它不让我知道什么时候有答案。