2016-03-29 8 views
0

Ich hoffe, Sie können dabei helfen, ich habe zwei Fahrzeugtabellen in DB2, OR und OS, ODER ist, wo die Bestellungen für die Autos, die geliefert werden, sind, und OS sind diejenigen Autos, die bereits sind verkauft, möchte alle Bestellungen in der OP-Tabelle konsultieren, aber nicht die, die in der OS-Tabelle storniert werden, ich identifiziere die stornierten nach ihrem Status ('8'), habe ich mit dieser Abfrage versucht, aber die Bestellungen bekomme ich sind nur die in der OS-Tabelle, nicht alle Befehle sind in der OS-Tabelle, ich habe versucht mit einem OUTER JOIN, aber es ist nicht das Ergebnis, das ich erwartet habe.DB2 Query Joins

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO 
WHERE OS.SLCD NOT IN ('8') 

dies wird mir nur die alle Aufträge in der OS-Tabelle und ohne die, die in der OP-Tisch (die OP-Tisch nicht SLCD-Status hat, möchte ich alle Aufträge auszuschließen, die einen 8-Status in die OS-Tabelle, aber diejenigen, die nicht in der OS-Tabelle sind).

Dies ist das gleiche Ergebnis.

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO AND OS.SLCD NOT IN ('8') 

Ich hoffe, jemand kann mir helfen. Dank viel

+0

Ihr zweiter Versuch ist falsch und wird das gleiche Ergebnis nicht liefern. Das erste sieht gut für mich aus, aber ich kann nicht ganz verstehen, was du damit falsch findest. Da es sich um einen linken Join handelt, werden alle Zeilen Ihrer linken Tabelle zurückgegeben - das ist OR, aber Sie haben "alle Befehle in der OS-Tabelle" geschrieben. – MichaelTiefenbacher

+0

Ja, ich dachte, der linke äußere Join gibt alle Zeilen in der OR-Tabelle zurück, aber in diesem Fall gibt nur die Aufträge in der OS-Tabelle mit dem SLCD-Status zurück, ich möchte auch die Daten der Aufträge abrufen, die NUR in sind Die OR-Tabelle, wenn ich die NOT-IN-Bedingung setze, wenn ich das Problem habe, gibt es nicht die Aufträge zurück, die nur in der OP-Tabelle sind. Ich schätze deine Hilfe danke. –

Antwort

0

Ich denke, es ist eine alternative Möglichkeit, diese Daten abzurufen:

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM TABLE.OR WHERE NOT EXISTS 
    (SELECT 1 FROM TABLE.OS WHERE OR.OBNO=OS.OBNO AND OS.SLCD = '8') 
+0

Danke @mustaccio Ich habe versucht die Abfrage, die Sie erwähnen, aber es ruft keine Daten, ich versuchte Ihre Abfrage auf einem anderen Weg, da die Art, die Sie erwähnen, gibt mir einen Fehler: SELECT PFOR.ORNO, PFOR.ORSC, PFOS.SLCD VON LPMXPFIL .PFOR PFOR INNER JOIN LPMXPFIL.PFOS PFOS AUF PFOR.ORNO = PFOS.OBNO WHERE NICHT EXISTIERT (SELECT PFOS.SLCD VON LPMXPFIL.PFOS PFOS PFOS.SLCD = '8') –