2009-07-27 5 views
0

Ich versuche, Daten aus den folgenden drei Tabellen zu gruppieren, um eine neue Tabelle zu erstellen. Die account_no Felder in bmf und acct_map werden tatsächlich von cmf gezeichnet.Erstellen von Tabellen mit Feldern aus 3 verschiedenen Tabellen

Felder:

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

Die Felder, die ich in meinem neuen Tisch wollen, sind:

external_id, account_no, balance_due 

Wenn ich Abfrage 1, ohne die external_id Spalte, es funktioniert gut und füllt die Daten korrekt. Aber wenn ich Abfrage 2 versuche, erstellt es eine leere Tabelle. Warum passiert dies?

Abfrage 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 

Abfrage 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 

Antwort

1

Haben Sie versucht, zuerst Ihre Select-Abfrage auszuführen? Ich vermute, es gibt keine account_no in der Tabelle acct_map, die mit account_no in bmf oder cmf übereinstimmt. Bitte überprüfen Sie, ob Ihre Anfrage in Ordnung ist und so aussieht wie ein Datenproblem.

+0

Dank Bhushan, es war ein Datenpopulationsproblem, wie Sie darauf hingewiesen haben. Funktioniert jetzt gut. Danke! – novice

0

Dies ist ein inner join, so vermute ich, dass es keine Aufzeichnungen von Abfrage 1 sind, die eine account_no mit acct_map teilen.

Sie können dies schnell testen mit der folgenden Abfrage:

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

Hallo Eric, ich stehe korrigiert. Danke für das Aufzeigen. Acct_map und query1 haben Konten gemeinsam. Tatsächlich enthält die Tabelle acct_map eine Liste aller Konten in der Datenbank. Ich versuche nur, Konten abzufragen, für die die Zahlung verarbeitet wurde, und erhalte die entsprechenden externen IDs in meiner neuen Tabelle. Haben Sie Vorschläge, wie die Abfrage geändert werden kann? – novice

0

Eric richtig ist, aber lassen Sie mich hinzufügen ... sollte dies nicht eine Ansicht anstelle von Daten bewegen sein?