2012-11-30 51 views
1

內部連接上有很多帖子,但不知道它是否可以解決我的問題?使用INNER JOIN乘以選定的行?

我有四個表,我希望加入其中前三個似乎是正確的,其時,我加入第四表聯接乘法行(表AB *表C)。

第4個表格只有37行,但是根據viewunitsonrun.strUnitCode,每行需要特別插入幾次,這些代碼在第一個表格(tblawardedlearedrs)中重複多次。

SELECT viewlearnersonrun.intRunID, 
     intlearnerID, 
     strFirstname, 
     strunitcode, 
     strGrade 
    FROM tblawardedlearners 
INNER JOIN viewlearnersonrun 
     ON viewlearnersonrun.intID = tblawardedlearners.intLearnerID 
INNER JOIN viewrun 
     ON viewrun.intID = viewlearnersonrun.intRunID /*CORRECT TO THIS POINT */ 
INNER JOIN viewunitsonrun 
     ON viewunitsonrun.strUnitCode = tblawardedlearners.strUnitCode 
WHERE viewlearnersonrun.intRunID = '200GE2' /* display only one Course */ 
+2

很抱歉,但在查詢中被連接4個表。 –

+3

你的問題應該包含所有表模式,一些數據(可以是假數據)以及你希望選擇的所需輸出。這樣,你會得到一個更合適的答案。 –

+0

如果沒有看到架構和/或一些示例數據,就無法說出任何智能! – svidgen

回答

4

它導致笛卡爾積,因爲兩個連接都返回多個記錄。爲了在第一個JOIN之後保持結果,您必須確保其他連接通過唯一鍵進行選擇。如果表格沒有用於選擇的唯一鍵,則可以使用DISTINCTGROUP BY進行子查詢(INLINE VIEW),以使其工作方式如何。

樣品:

SELECT viewlearnersonrun.intRunID, 
     intlearnerID, 
     strFirstname, 
     strunitcode, 
     strGrade 
    FROM tblawardedlearners 
INNER JOIN viewlearnersonrun 
     ON viewlearnersonrun.intID = tblawardedlearners.intLearnerID 
INNER JOIN viewrun 
     ON viewrun.intID = viewlearnersonrun.intRunID 
INNER JOIN (SELECT DISTINCT strUnitCode --, others columns... 
       FROM viewunitsonrun 
      ) v 
     ON v.strUnitCode = tblawardedlearners.strUnitCode 
WHERE viewlearnersonrun.intRunID = '200GE2' 
+0

這是非常有益的感謝。 – starydynamo