2009-07-27 27 views
0

J'essaie de regrouper les données des trois tables suivantes pour créer une nouvelle table. les champs account_no dans bmf et acct_map sont en fait tirés de cmf.Création de tables avec des champs provenant de 3 tables différentes

Domaines:

bmf: account_no, trans_date 
cmf: account_no, balance_due 
acct_map: account_no, external_id 

Les champs que je veux dans ma nouvelle table sont:

external_id, account_no, balance_due 

Lorsque j'utilise requête 1, sans la colonne external_id, il fonctionne très bien et renseigne les données correctement. Mais quand j'essaye la question 2, cela crée une table vide. Pourquoi cela arrive-t-il?

Requête 1:

create table paid as 
select bmf.account_no, sum(cmf.balance_due) postpaid_balance 
from bmf, cmf 
where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and 
bmf.account_no = cmf.account_no 
group by bmf.account_no 

Requête 2:

create table paid as 
select bmf.account_no, sum(cmf.balance_due) postpaid_balance, acct_map.external_id 
from bmf, cmf, acct_map 
where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and 
bmf.account_no = cmf.account_no and 
acct_map.account_no = bmf.account_no 
group by bmf.account_no, acct_map.external_id 

Répondre

1

Avez-vous essayé d'exécuter votre requête select uniquement en premier? Je devine qu'il n'y a aucun account_no dans la table acct_map qui correspond à account_no dans bmf ou cmf. Veuillez vérifier que votre requête semble correcte, cela ressemble à un problème de données.

+0

Merci Bhushan, c'était un problème de population de données comme vous l'avez souligné. Fonctionne bien maintenant. THX! – novice

0

Ceci est un inner join, donc je suppose qu'il n'y a pas des enregistrements de requête 1 qui partagent un account_no avec acct_map.

Vous pouvez tester rapidement cela avec la requête suivante:

select count(*) 
from 
    acct_map 
where 
    account_no in (select bmf.account_no 
      from bmf, cmf 
      where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and 
      bmf.account_no = cmf.account_no) 
+0

Salut Eric, je suis corrigé. Merci de m'avoir signalé. Le acct_map et query1 ont des comptes en commun. En effet, la table acct_map a une liste de tous les comptes dans la base de données. J'essaie seulement d'interroger les comptes pour lesquels le paiement a été traité et d'obtenir les identifiants externes correspondants dans ma nouvelle table. Des suggestions sur la façon dont la requête peut être modifiée? – novice

0

Eric est juste, mais permettez-moi d'ajouter ... ne devrait pas être cette vue au lieu des données autour?

Questions connexes