2016-11-04 59 views
0

對不起,我很難把我的問題變成真正的單詞。我想我可能從根本上誤解了外鍵的工作原理。 這裏是我的表:外鍵引用Compte(id)或sousCompte(id)或Rubrique(id)等

  • - >孔特:IDC,desci,借記卡,信用卡

  • - > sousCompte:IDSC,IDC,descri,借記卡,信用卡--idc是一個外鍵表compte

  • - > rubrique:idR,idSc,descri,debit,credit - idSc是來自表sousCompte的外鍵。
  • - >解放運動:ID,idCompte,借記卡信用卡 - idcompte是一個外鍵引用無論是孔特或sousCompte或Rubrique

怎麼能i點idCompte從幾個表就像外鍵引用這個例子是可以的。

+0

所以你問你的表的foreigen鍵列(Mouvement.idCompte)是否可以指向兩個不同表中的ID列? – Chrisi

+0

是的!我想知道,如果有可能從許多id表有一個外鍵引用。這是最好的方法,但我不知道如何在sql中重寫它。 –

回答

0

你需要內在加入你的運動對所有你想比較的表,並留下一個標記爲1的存在。在外部查詢中,總結由MouvementID分組的所有標記。

SELECT 
    MouvementId=Mouvement.id, 
    ReferencesCompte=MAX(compteFlag), 
    ReferencesSousCompte=MAX(sousCompteFlag), 
    RefrencesRubrique=MAX(rubriqueFlag) 
FROM 
(
    SELECT 
     Mouvement.id, 
     compteFlag=CASE WHEN NOT C.idC IS NULL THEN 1 ELSE 0 END, 
     sousCompteFlag=CASE WHEN NOT SC.idSC IS NULL THEN 1 ELSE 0 END, 
     rubriqueFlag=CASE WHEN NOT R.idR IS NULL THEN 1 ELSE 0 END, 
    FROM 
     Mouvement M 
     LEFT OUTER JOIN compte C ON C.idC=M.idCompte 
     LEFT OUTER JOIN sousCompte SC ON SC.idC=M.idCompte 
     LEFT OUTER JOIN rubrique R ON R.idR=M.idCompte 
)AS DATA 
GROUP BY 
    Mouvement.id 
+0

感謝@Ross,這很有幫助。 –