PDA

View Full Version : QMQRY und Primärdatei



Matthias.Hayn
03-12-04, 10:38
Hallo zusammen,

ich habe mehrere Queries auf QMQRY umgestellt und jetzt das Problem, das die Auswähl 'Mit Primärdatei gleiche Sätze' nicht übernommen wurde.
Kann ich das in der QMQRYSRC ändern? Und wenn ja, wie?

Danke an alle im voraus.

Gruss
Matthias

Matthias.Hayn
03-12-04, 10:42
Hier noch ein Ausschnitt der Quelldatei
Problem ist die letzte Verknüpung, zum Teil ist in der
Artikeldatei keine entsprechende Artikelnummer vorhanden

0001.00 H QM4 05 Q 01 E V W E R 01 03 04/11/22 13:31
0002.00 V 1001 050 Rechnungsausgänge GD nach Vertreter
0003.00 V 5001 004 *HEX
0004.00 SELECT
0005.00 ALL A.VERTRT, A.KUNNUM, D.BZ1, D.PLZ, D.ORT, A.ORDNUM, A.BELNUM,
0006.00 A.DRKDAT, B.ASTNUM, E."CHAR", E.ZF3, (B.POSWRT), B.GELMGE, E.VKPRS
0007.00 FROM FSBD106/FSFAK00P A,
0008.00 FSBD106/FSFAK01P B,
0009.00 FSBD101/FSADR01P C,
0010.00 FSBD101/FSADR00P D,
0011.00 FSBD101/FSAST00P E
0012.00 WHERE A.BELNUM = B.BELNUM
0013.00 AND A.KUNNUM = C.MANNUM
0014.00 AND C.ADRNUM = D.ADRNUM
0015.00 AND B.ASTNUM = E.ASTNUM
0016.00 AND( A.DRKDAT BETWEEN &FDATE AND &TDATE
0017.00 AND A.VERTRT = &VTX1
0018.00 AND C.VWDART = 'VR'
0019.00 AND C.ZNUM = 1

Fuerchau
03-12-04, 11:55
Mit Primärdatei gleiche Sätze ist ein "Inner Join", der durch Aufzählung der Dateien und der Beziehungen in der Where-Klausel so korrekt übernommen sit.

BenderD
03-12-04, 12:12
Hallo,

ist das nicht ein left join? der auch Sätze liefern soll, die kein Pendant haben?


Dieter Bender



Mit Primärdatei gleiche Sätze ist ein "Inner Join", der durch Aufzählung der Dateien und der Beziehungen in der Where-Klausel so korrekt übernommen sit.

Pikachu
03-12-04, 12:21
Hallo Fuerchau und BenderD !

Hatten wir nicht vor kurzem schonmal eine Diskussion über die ganzen JOINs in bezug auf Query und QMQuery (http://www.rlpforen.de/showthread.php?t=6132)? ;)

Gruß
Jürgen

Pikachu
03-12-04, 12:30
Hallo Matthias!

Ändere die Teile der WHERE-Bedingung um die Dateien zu verbinden in einen LEFT OUTER JOIN um. Hier ist dieser Join beschrieben:

http://publib.boulder.ibm.com/iseries/v5r1/ic2929/info/sqlp/rbafymst126.htm .

Viele Grüße
Jürgen

BenderD
03-12-04, 12:32
jetzt wo du's sagst...


Hallo Fuerchau und BenderD !

Hatten wir nicht vor kurzem schonmal eine Diskussion über die ganzen JOINs in bezug auf Query und QMQuery (http://www.rlpforen.de/showthread.php?t=6132)? ;)

Gruß
Jürgen

Fuerchau
04-12-04, 23:15
Wenn im Join keine on-Beziehung benannt ist, sondern ausschließlich eine Where-Bedingung unter Ausschluss von NULL-Values, dann ist das ein INNER JOIN. Enthält allerdings die 1. Datei auch NULL-Werte in den Where-Feldern, kann es zu unerwünschten Ergebnissen führen, da NULL in der 1. Datei mit NULL in der 2. verglichen wird, was auch zutrifft, wenn da kein satz ist.

Also besser immer per JOIN die Verbindung definieren (ausser, wenn NULL's kein Thema sind).

Left [outer] Join on = Alle Sätze der 1. Datei, falls vorhanden auch die der 2. Datei (im Gegensatz zu Query liefert SQL den NULL-Wert und nicht den Default)

Exception Join on = Alle Sätze der 1. Datei, die NICHT in der 2. Datei sind

BenderD
05-12-04, 11:04
Hallo

das rechnen mit NULL gehorcht einer dreiwertigen Logik:
alle Vergleiche mit NULL liefern false
d.H. inner join lässt alle Sätze weg, wo eine der beiden Dateien im Vergleichsfeld NULL hat und auch die wo beide NULL haben.
Das liefern von NULL Werten kann man mit COALESCE unterdürcken. COALESCE(FEld1, ' ') liefert blanks, wenn Feld1 NULL ist, ansonsten den Inhalt von Feld1).

mfg

Dieter Bender


Wenn im Join keine on-Beziehung benannt ist, sondern ausschließlich eine Where-Bedingung unter Ausschluss von NULL-Values, dann ist das ein INNER JOIN. Enthält allerdings die 1. Datei auch NULL-Werte in den Where-Feldern, kann es zu unerwünschten Ergebnissen führen, da NULL in der 1. Datei mit NULL in der 2. verglichen wird, was auch zutrifft, wenn da kein satz ist.

Also besser immer per JOIN die Verbindung definieren (ausser, wenn NULL's kein Thema sind).

Left [outer] Join on = Alle Sätze der 1. Datei, falls vorhanden auch die der 2. Datei (im Gegensatz zu Query liefert SQL den NULL-Wert und nicht den Default)

Exception Join on = Alle Sätze der 1. Datei, die NICHT in der 2. Datei sind

Matthias.Hayn
06-12-04, 08:51
Danke an alle für die Antworten.
Werde mich jetzt mal mit dem Left outer Join beschäftigen.

Gruss

Matthias