好的,所以我有三个包含这些字段的表(当然还有更多不相关的表):
full_table
属性
条款ArticleID
MAIN_TABLE
articleID
other_table
属性
所以在full_table中有" articleID"的完整列表。及其相关的属性"。在main_table中只有一些articleID。在other_table中只有一些"属性"。
我想要的只是那些属性在other_table中并且其articleID在main_table中的文章。
编辑:描述的一些视觉帮助
问题是我的查询还返回了很多不在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小提琴上的示例图片和代码并按照需要工作,因此问题必然来自真实查询的复杂性增加,我将继续研究问题的根源。
答案 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