Komplexe SQL-Abfrage mit Inner-Joins

Status
Nicht offen für weitere Antworten.

Verena22

Mitglied
Hallo allerseits!
Ich will gerade um eine Information (Auftragsnummer) zu bekommen über zwei bzw. drei Tabellen verbinden. Der Fall stellt sich wie folgt dar:

Unser Startpunkt ist die Rechnung. Von dort aus kommen wir zum Lieferschein, wenn der Basistyp 15 ist, oder wir kommen auf den Auftrag, wenn der Basistyp 17 ist. Die Basis bildet hier entweder der Lieferschein oder der Auftrag.

Liegt uns ein Lieferschein vor, kommen wir von dort aus auf den Auftrag.

Klingt einfach oder? Verbunden sind die Dokumente über Dok-IDs.

So meine Frage, wie bilde ich für den Fall jetzt mit Inner-Joins und Where Bedingungen mein SQL-Statement dafür? Mir fällt das gerade ein bisschen schwer, weil ich mir nicht vorstellen kann, wie ich die zwei Fälle, also entweder auf den Lieferschein zu gehen oder direkt auf den Auftrag, abdecke?

Kann mir da jemand Pfiffiges weiterhelfen?

Gruß
Verena
 

Niki

Top Contributor
Ich bin mir jetzt nicht so sicher ob ein UNION in allen DBs unterstützt wird. Aber falls es bei dir möglich ist könntest du beide Fälle unabhängig von einander damit abdecken. Das würde dann so aussehen:
Code:
SELECT a.auftragsnummer
FROM auftraege a, rechnung r,...
WHERE r.typ = 15,....
UNION
SELECT l.auftragsnummer
FROM lieferscheine l, rechnung r,...
where r.typ = 17

Ansonsten könnte es noch etwas komplizierter mit sub-Selects gehen.
 

foobar

Top Contributor
Wie würde man denn da Subselects bilden?
Das ist unabhängi vom Union.

Mit einem Union kannst du 2 Queries zu einer Verknüpfen solange die Anzahl der Spalten in beiden Queries übereinstimmt. D.h. du setzt 2 Queries ab bekommst aber nur ein Ergebnis und daher auch nur ein ResultSet.
 

Niki

Top Contributor
Mit subselects könnte das ganze ca. so aussehen. Ich bin nicht so der SQL Profi, ich komm zwar mit meinem Wissen immer ans Ziel, aber wie performant die Statements sind kann ich nicht genau sagen.

Code:
select distinct a.*
from artikel a
where a.nummer in (select a2.nummer from artikel a2, lieferschein l where a2.nummer = l2.artikel and...) OR
a.nummer in (select a2.nummer from artikel a2, rechnung r where a2.nummer = .....)

Wie gesagt, ich würd da eher auf UNION setzen. Ist wahrscheinlich auch schneller und sicher einfacher zu lesen.
 

Verena22

Mitglied
So, das mit Union hat mich schon weiter gebracht. vielen dank dafür. jetzt müsste ich nur noch folgende zwei Abfragen zusammenführen. Wäre total klasse, wenn mir auch da helfen könntet.

1)
Code:
SELECT  T1.CardName, T3.Street, T3.City, T3.ZipCode, T4.Name, T1.DocNum, T1.DocDate, T2.U_hst_num,  T0.ItemCode, T0.Dscription, T0.Quantity, T0.Price, T0.LineTotal, T0.Quantity as 'Lizenzen', ORDR.Docnum 
FROM INV1 T0  
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode 
INNER JOIN CRD1 T3 ON T1.CardCode = T3.CardCode 
INNER JOIN OCRY T4 ON T3.Country = T4.Code 
WHERE T2.FirmCode = 9 AND T3.Address = 'Empfänger'

2)
Code:
SELECT ORDR.Docnum
FROM ORDR, INV1
WHERE ORDR.DocEntry = (
	SELECT DLN1.BaseEntry 
	FROM DLN1 
	WHERE DLN1.DocEntry = 14388
) AND (
	SELECT INV1.BaseType 
	FROM INV1 
	WHERE INV1.DocEntry = 14338) = 15
UNION
SELECT ORDR.Docnum
FROM ORDR
where ORDR.DocEntry =  (
		SELECT INV1.BaseEntry
		FROM INV1 
		WHERE INV1.DocEntry = 14338
)AND (	SELECT INV1.BaseType 
		FROM INV1 
		WHERE INV1.DocEntry = 14338) = 17

Gruß
Verena
 

Verena22

Mitglied
So, ich habe mich schon so weit vorgehangelt:

Code:
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0  
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode 
INNER JOIN CRD1 T3 ON T1.CardCode = T3.CardCode 
INNER JOIN OCRY T4 ON T3.Country = T4.Code 
WHERE ORDR.DocEntry = (
	SELECT DLN1.BaseEntry 
	FROM DLN1 
	WHERE DLN1.DocEntry = T0.BaseEntry
) AND T0.BaseType = 15
UNION
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode 
INNER JOIN CRD1 T3 ON T1.CardCode = T3.CardCode 
INNER JOIN OCRY T4 ON T3.Country = T4.Code 
where ORDR.DocEntry = T0.BaseEntry
AND T0.BaseType = 17

Leider bekomme ich nur jetzt folgende Fehlermeldung vom Microsoft SQL 2005 Server:
"Meldung 512, Ebene 16, Status 1, Zeile 1
Die Unterabfrage gab mehr als einen Wert zurück. Das ist ungültig, wenn die Unterabfrage auf =, !=, <, <= , >, >= folgt oder als Ausdruck verwendet wird."

Die letzte Änderung, die ich getan habe, war im Abschnitt
Code:
SELECT DLN1.BaseEntry 
FROM DLN1 
WHERE DLN1.DocEntry = T0.BaseEntry

Da stand anstatt von T0.BaseEntry ein fester Wert drin, den ich zum Testen genutzt habe.

Gruß
Verena
[/code]
 

foobar

Top Contributor
Entweder du sorgst dafür, daß die Subquery nur eine Tupel liefert oder du machst das so:

Code:
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0 
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
INNER JOIN CRD1 T3 ON T1.CardCode = T3.CardCode
INNER JOIN OCRY T4 ON T3.Country = T4.Code
WHERE ORDR.DocEntry in (
   SELECT DLN1.BaseEntry
   FROM DLN1
   WHERE DLN1.DocEntry = T0.BaseEntry
) AND T0.BaseType = 15
UNION
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
INNER JOIN CRD1 T3 ON T1.CardCode = T3.CardCode
INNER JOIN OCRY T4 ON T3.Country = T4.Code
where ORDR.DocEntry = T0.BaseEntry
AND T0.BaseType = 17
 

FenchelT

Bekanntes Mitglied
Verena22 hat gesagt.:
So, ich habe mich schon so weit vorgehangelt:

Code:
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0


Hallo Verena,

ist es eigentlich beabsichtigt, aus den Tabellen ORDR und INV1 zu selektieren, ohne diese miteinander in Bezug zu setzen?


Gruesse
 

Verena22

Mitglied
FenchelT hat gesagt.:
Verena22 hat gesagt.:
So, ich habe mich schon so weit vorgehangelt:

Code:
SELECT ORDR.Docnum, T0.DocEntry
FROM ORDR, INV1 T0


Hallo Verena,

ist es eigentlich beabsichtigt, aus den Tabellen ORDR und INV1 zu selektieren, ohne diese miteinander in Bezug zu setzen?


Gruesse

Ich glaube das ist ein entscheidender Tipp gewesen :)
Danke!

Jetzt muss ich nur noch mal die Daten überprüfen und wenn die stimmen, hab ich wohl die Lösung :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
M Derby/JavaDB Komplexe Abfrage vereinfachen Datenbankprogrammierung 2
G Komplexe Abfrage entzerren Datenbankprogrammierung 3
F Apache Cassandra komplexe Datentypen Datenbankprogrammierung 2
F myBatis und komplexe Abfragen Datenbankprogrammierung 3
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
L PostgreSQL Abfrage mit EclipseLink Datenbankprogrammierung 7
S Berechnung des Datumsunterschieds in der SQL-Abfrage Datenbankprogrammierung 1
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
nonickatall MySQL SQL Abfrage erneut ausführen oder rs aktualisieren Datenbankprogrammierung 14
Kirby.exe Verständnisproblem bei SQL Abfrage Datenbankprogrammierung 27
N SQL-Abfrage in JTextField ausgeben Datenbankprogrammierung 6
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
W MySQL DB Abfrage in Array, gemischte Array, generelles vorgehen Datenbankprogrammierung 4
D SQL Abfrage optimieren Datenbankprogrammierung 35
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
D Regelmäßige Abfrage aus Workbench Datenbankprogrammierung 6
M SQL-Statement Hilfe bei SQL-Abfrage Datenbankprogrammierung 2
D Abfrage - Spalte(Datum) ändern (Oracle) Datenbankprogrammierung 7
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
M MySQL Anbindung und Abfrage an die Datenbank Datenbankprogrammierung 2
RowdyN SQLite Einfache Abfrage mit temporäre Tabelle, die nur innerhalb der Abfrage gültig ist Datenbankprogrammierung 0
E Abfrage auf HSQLDB Datenbankprogrammierung 4
M MySQL SQL Abfrage in JTable mit Berechnung Datenbankprogrammierung 3
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
S SQL Abfrage Datenbankprogrammierung 2
F Abfrage der letzten Einträge Datenbankprogrammierung 2
J SELECT Abfrage/Suche Datenbankprogrammierung 4
OnDemand SQL Abfrage und Equals Datenbankprogrammierung 4
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
M MySQL MySQLSyntaxError in Java, obwohl Abfrage in HeidiSQL korrekt Datenbankprogrammierung 2
ruutaiokwu sql abfrage mit rekursion, mit oder ohne cte... Datenbankprogrammierung 5
J SQLite Abfrage ausführen stoppt für Zyklus? Wie es zu lösen? Datenbankprogrammierung 3
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
L SQL-Abfrage bricht vor dem Ende ab Datenbankprogrammierung 2
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
S SQL-Abfrage, Filewriter .txt Datei Datenbankprogrammierung 2
P Datenbank- Abfrage mit null'en Datenbankprogrammierung 2
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
D MySQL Erstellen der richtigen Abfrage Datenbankprogrammierung 3
D MySQL DB Abfrage Prüfen Datenbankprogrammierung 10
D JDBC insert mit select abfrage Datenbankprogrammierung 5
E PostgreSQL Exception too ...many clients already bei DB-Abfrage Datenbankprogrammierung 14
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
W No data found: SQL-Abfrage funktioniert nur beim Debuggen Datenbankprogrammierung 3
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
H JSON Array abfrage beschleunigen Datenbankprogrammierung 2
S MySQL Abfrage: Wenn Feld leer, alles anzeigen Datenbankprogrammierung 5
Mrtwomoon Abfrage-Ergebnisse in einem Fenster darstellen Datenbankprogrammierung 8
0 SQL Abfrage Bestellung Datenbankprogrammierung 15
G SQLite SQLite Abfrage Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
B My-SQL Abfrage - Out Of Memory Error Datenbankprogrammierung 13
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
K SQLite Einfache DB-Abfrage Datenbankprogrammierung 2
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
C Sortierung bei SQL-Abfrage Datenbankprogrammierung 3
B Bei Abfrage schießt der Speicher in die Höhe Datenbankprogrammierung 6
M SQL Abfrage Dupliakte bei Kreuzvergleich Datenbankprogrammierung 2
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
G SQL Abfrage Datenbankprogrammierung 5
C SQL-Abfrage Datenbankprogrammierung 4
B SQL-Abfrage Datenbankprogrammierung 4
R SQL Abfrage, je nach ausgewählten Parametern Datenbankprogrammierung 11
C Wert in SQL-Abfrage zählen lassen Datenbankprogrammierung 8
R Memory leaks bei DB Abfrage Datenbankprogrammierung 16
S Abfrage auf SQLite-DB Datenbankprogrammierung 2
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G Abfrage von Teilnehmern Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
F MySQL SQL Abfrage für u.a. Spaltenname key Datenbankprogrammierung 4
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
A MySQL Ergebnss aus SQL Abfrage in Hauptklasse verwenden Datenbankprogrammierung 3
N Geschwindigkeit bei if Abfrage Datenbankprogrammierung 11
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G Performante SQL- Abfrage (LIKE %) Datenbankprogrammierung 21
G Join Abfrage Datenbankprogrammierung 12
M db abfrage fehlerhaft Datenbankprogrammierung 5
C MySQL Abfrage mit flexibler WHERE bedingung Datenbankprogrammierung 10
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2
G SQL Abfrage über mehrere Tabellen Datenbankprogrammierung 28
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
H MySQL Datenbank Abfrage Datenbankprogrammierung 10
André Uhres SQL Abfrage erkennt keine Buchstaben mit Akzenten (z. B. é, è) Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben