Einzelnen Beitrag anzeigen
Alt 07.01.2009, 13:25   #1
Hans Jürgen
Registrierter Benutzer
Abfrage mit Abfrage verknüpfen

Hallo zusammen,

ein schönes neues Jahr zuerst einmal!

Ich stehe derzeit wie der "Ochs vorm Berg vor einem Problem" und komme nicht dahinter:

Ich habe eine Abfrage RE1, in der aus einer Verknüpfung von rechnung.df, kunden.df und fakt.df eine Teilmenge ausgewählt wird (zu jeder Rechnung gibt es dadurch mehrere Zeilen).

Im weiteren Verlauf benötige ich eine Abfrage, in der ich nur die dazugehörigen einzelnen Rechnungen habe.

Hatte mir einfach vorgestellt, mich auf RE1 zu beziehen:
FROM rechnung WHERE rech_nr IN SELECT rech_nr FROM RE1
Das funktioniert aber nicht bei mir (vielleicht geht es auch nicht). Muss man dem Compiler vielleicht irgendwie mitteilen, dass es sich bei RE1 nicht um eine Datenbank, sondern um eine Abfrage handelt?

Dann habe ich die komplette Abfrage von RE1 in das IN SELECT gesetzt, funktioniert aber auch nicht richtig (Ende der RAM-Disk und andere unerklärliche Fehler, Fehlermeldung VI2REOP Zeile 164: Dateiende RAMD:&4 - wobei auf dem Laufwerk, auf dem ich RAMD liegen habe, noch beliebig Platz ist und die &4 nur 120kb groß ist. Die Fehlermeldung kommt, wenn ich das Programm ein paar mal hintereinander laufen lasse. Availmem liegt die ganze Zeit bei 11000 und reduziert sich nicht weiter).

Ich könnte natürlich RE1 in eine temporäre Datenbank zwischenspeichern und dann diese in das IN SELECT nehmen, halte ich aber für nicht geschickt.

Hat jemand auf die Schnelle eine andere Idee?

Gruß
Hans Jürgen (hjlint#)

P.S.: Hier die Abfragen im Original:

PHP-Code:
LOCAL VIEW RE1=FROM FAKT,KUNDEN,RECHNUNG 
       SELECT kdnr
,name1,vname,vertragsnr,fällig_von,fällig_bis,
              
betrag,offen,rech_nr,datum,einzug  
       WHERE KDNR
=KUNDEN.KDNR 
        
AND RECH_NR=RECHNUNG.RECH_NR AND RECH_NR>990000 
        
AND (KDNR=reopkdnr OR GVNR=reopgvnr OR NAME IN (reopn1:reopn2))
        AND 
kdnr<>reopkdnra 
        
AND GVNR<>reopngvnr 
        
AND NOT name IN (reopna1:reopna2)  
        AND 
vu_code IN (reopvuc1:reopvuc2)  
        AND 
NOT vu_code IN (reopvun1:reopvun2)  
        AND (
rechnung.einzug=reoplevb1 OR rechnung.einzug=reoplevb2
        AND 
OFFEN<>
       ORDER NAME
,KDNR,VERTRAGSNR,FÄLLIG_VON 
Das war die erste Idee:

PHP-Code:
LOCAL VIEW RE2=FROM rechnung WHERE einzug=TRUE AND rech_nr IN SELECT rech_nr FROM RE1 ORDER name,konto (funktioniert bei mir nichtwäre natürlich die einfachste Lösung
Andere Idee (ist aber teilweise leer oder führt zu Abstürzen):

PHP-Code:
LOCAL VIEW RE2=FROM rechnung WHERE einzug=TRUE AND rech_nr IN SELECT rech_nr 
       FROM FAKT
,KUNDEN,RECHNUNG 
       WHERE KDNR
=KUNDEN.KDNR 
        
AND RECH_NR=RECHNUNG.RECH_NR AND RECH_NR>990000 
        
AND (KDNR=reopkdnr OR GVNR=reopgvnr OR NAME IN (reopn1:reopn2))
        AND 
kdnr<>reopkdnra 
        
AND GVNR<>reopngvnr 
        
AND NOT name IN (reopna1:reopna2)  
        AND 
vu_code IN (reopvuc1:reopvuc2)  
        AND 
NOT vu_code IN (reopvun1:reopvun2)  
        AND (
rechnung.einzug=reoplevb1 OR rechnung.einzug=reoplevb2
        AND 
OFFEN<>
       ORDER NAME
,KONTO 
Hans Jürgen ist offline   Mit Zitat antworten