2016-11-04 2 views
0

Извините, мне очень сложно поставить свой вопрос на настоящие слова. Я думаю, что я могу принципиально не понимать, как работают внешние ключи. здесь мои таблицы:ссылки на внешние ключи либо Compte (id), либо sousCompte (id) или Rubrique (id) и т. Д.

  • -> Конт: IdC, desci, дебетовые, кредитные

  • -> sousCompte: IDSC, IdC, descri, дебетовые, кредитные --idc является внешним ключом от table compte

  • -> rubrique: idR, idSc, descri, debit, credit - idSc является внешним ключом из таблицы sousCompte.
  • -> Движение: идентификатор, idCompte, дебет кредит - idcompte является внешним ключом ссылки либо Конт или sousCompte или RUBRIQUE

так, как я могу указать idCompte в качестве внешнего ключа ссылки из нескольких таблиц так же, как пример abouve.

+0

Итак, вы спрашиваете, может ли столбец ключа foreigen (Mouvement.idCompte) вашей таблицы указать столбец идентификатора в двух разных таблицах? – Chrisi

+0

yep! Интересно, если возможно иметь ссылки на внешние ключи из многих таблиц 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, это было полезно. –

Смежные вопросы