2014-11-04 78 views
-1

好了,所以我有三個表與這些領域(當然也有更多的非相關):內連接沒有直接關係

full_table
屬性
條款ArticleID

MAIN_TABLE
商品ID

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:我已經測試樣品PIC和代碼上的SQL小提琴,並根據需要工作,所以這個問題必須來自真正的查詢增加了複雜性,我我們將繼續研究問題的根源。

+2

請編輯您的問題,並提供樣本數據和預期的結果。您的查詢似乎會按照您的要求進行:「僅獲取屬性位於other_table中的那些文章」。 – 2014-11-04 13:21:34

+0

謝謝戈登,在這裏你拿着樣品和想要的結果;) – Pinx0 2014-11-04 14:01:56

+0

。 。你應該刪除這個問題,因爲這是由誤解造成的。 – 2014-11-04 16:00:56

回答

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 
0

請提供外鍵關係,因此示例更清晰。然而,一目瞭然,你能做些什麼:

SELECT ot.attribute, 
     ft.articleId 
FROM other_table ot 
INNER JOIN full_table ft ON ot.attribute = ft.attribute; 
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