karlchristian
Goto Top

2 SQL Abfragen miteinander verbinden

Hallo,

ich habe 2 Abfragen, welche ich mit inner join auf ELGDEPOTNR zusammen fassen möchte
und alle Felder dann ausgeben,


Nur komme ich nicht drauf wie dieses möglich ist.

Content-ID: 247527

Url: https://administrator.de/contentid/247527

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

LianenSchwinger
LianenSchwinger 27.08.2014 aktualisiert um 12:44:36 Uhr
Goto Top
Hallo,

direkt die 1. Frage - warum gruppierst Du in der 2. Abfrage?!? Ist doch keine Aggregat-Funktion im Spiel.

Ansonsten ist das doch einfach. Du hängst die Tabelle ELGREIFENMODELL per INNER JOIN in die 1. Abfrage.
SELECT 	ADRESSE.GPTNR, 
	GESCHPARTNER.NAME1, 
	ADRESSE.STRASSE, 
	ADRESSE.PLZ, 
	ADRESSE.ORT, 
	ELGEINLAGERUNG.ELGDEPOTNR, 
	ELGEINLAGERUNG.FZGID, 
	ELGEINLAGERUNG.FABRIKATKZ, 
	ELGEINLAGERUNG.MODCODE, 	
	ELGEINLAGERUNG.MODBEZEICHNUNG, 
	ELGEINLAGERUNG.FAHRGESTELLNR, 
	ELGEINLAGERUNG.AMTKENNZ, 
	ELGEINLAGERUNG.EINLAGERTYP, 
	ELGEINLAGERUNG.EINLAGERSTATUS, 
	ELGEINLAGERUNG.EINLAGERDATUM, 
	ELGEINLAGERUNG.EINLAGERBIS, 
	ELGEINLAGERUNG.ELGLAGERORTID, 
	ELGEINLAGERUNG.AUSLAGERDATUM, 
	ELGEINLAGERUNG.STORNODATUM,

	ELGREIFENMODELL.SAISONKZ

FROM ELGEINLAGERUNG 
INNER JOIN (ADRESSE INNER JOIN GESCHPARTNER ON ADRESSE.GPTNR = GESCHPARTNER.GPTNR) ON ELGEINLAGERUNG.GPTNRKUNDE = GESCHPARTNER.GPTNR 
INNER JOIN (ELGREIFENMODELL INNER JOIN ELGEINLAGREIFEN ON ELGREIFENMODELL.ELGREIFENMODELLID = ELGEINLAGREIFEN.ELGREIFENMODELLID) ON ELGEINLAGERUNG.ELGDEPOTNR = ELGEINLAGREIFEN.ELGDEPOTNR
WHERE ELGEINLAGERUNG.EINLAGERSTATUS Like 'EIN';

Sofern ELGEINLAGERUNG.ELGDEPOTNR = ELGEINLAGREIFEN.ELGDEPOTNR dies zutrifft.

G Jörg
karlchristian
karlchristian 27.08.2014 aktualisiert um 12:44:23 Uhr
Goto Top
Hallo Jörg,


zu Frage 1,

In der abfrage 2 habe ich doppelte Werte im Vorfeld herausnehmen wollen.

Wenn ich deine o.g. Lösung verwendet bekomme ich doppelte Werte vorgeblendet

Versuche ich mit Distinct zu arbeiten kommt es zu nem Fehler

SELECT DISITNCT ELGEINLAGERUNG.ELGDEPOTNR, ADRESSE.GPTNR,GESCHPARTNER.NAME1,ADRESSE.STRASSE,ADRESSE.PLZ,
ADRESSE.ORT,ELGEINLAGERUNG.FZGID,	ELGEINLAGERUNG.FABRIKATKZ,ELGEINLAGERUNG.MODCODE, ELGEINLAGERUNG.MODBEZEICHNUNG, 
ELGEINLAGERUNG.FAHRGESTELLNR, ELGEINLAGERUNG.AMTKENNZ, ELGEINLAGERUNG.EINLAGERTYP, ELGEINLAGERUNG.EINLAGERSTATUS, ELGEINLAGERUNG.EINLAGERDATUM, ELGEINLAGERUNG.EINLAGERBIS, ELGEINLAGERUNG.ELGLAGERORTID, ELGEINLAGERUNG.AUSLAGERDATUM, ELGEINLAGERUNG.STORNODATUM,ELGREIFENMODELL.SAISONKZ
FROM ELGEINLAGERUNG 
INNER JOIN (ADRESSE INNER JOIN GESCHPARTNER ON ADRESSE.GPTNR = GESCHPARTNER.GPTNR) ON ELGEINLAGERUNG.GPTNRKUNDE = GESCHPARTNER.GPTNR 
INNER JOIN (ELGREIFENMODELL INNER JOIN ELGEINLAGREIFEN ON ELGREIFENMODELL.ELGREIFENMODELLID = ELGEINLAGREIFEN.ELGREIFENMODELLID) ON ELGEINLAGERUNG.ELGDEPOTNR = ELGEINLAGREIFEN.ELGDEPOTNR
WHERE ELGEINLAGERUNG.EINLAGERSTATUS='EIN'

bzw der Versuch mit GROUP BY ELGREIFENMODELL.SAISONKZ schlägt fehl (jedenfalls wenn ich es ans Ende setzt
karlchristian
karlchristian 27.08.2014 aktualisiert um 12:44:08 Uhr
Goto Top
Ich habs nun unsauber selbst behoben

SELECT DISITNCT * FROM
(SELECT ELGEINLAGERUNG.ELGDEPOTNR, ADRESSE.GPTNR,GESCHPARTNER.NAME1,ADRESSE.STRASSE,ADRESSE.PLZ,
ADRESSE.ORT,ELGEINLAGERUNG.FZGID,	ELGEINLAGERUNG.FABRIKATKZ,ELGEINLAGERUNG.MODCODE, ELGEINLAGERUNG.MODBEZEICHNUNG, 
ELGEINLAGERUNG.FAHRGESTELLNR, ELGEINLAGERUNG.AMTKENNZ, ELGEINLAGERUNG.EINLAGERTYP, ELGEINLAGERUNG.EINLAGERSTATUS, ELGEINLAGERUNG.EINLAGERDATUM, ELGEINLAGERUNG.EINLAGERBIS, ELGEINLAGERUNG.ELGLAGERORTID, ELGEINLAGERUNG.AUSLAGERDATUM, ELGEINLAGERUNG.STORNODATUM,ELGREIFENMODELL.SAISONKZ
FROM ELGEINLAGERUNG 
INNER JOIN (ADRESSE INNER JOIN GESCHPARTNER ON ADRESSE.GPTNR = GESCHPARTNER.GPTNR) ON ELGEINLAGERUNG.GPTNRKUNDE = GESCHPARTNER.GPTNR 
INNER JOIN (ELGREIFENMODELL INNER JOIN ELGEINLAGREIFEN ON ELGREIFENMODELL.ELGREIFENMODELLID = ELGEINLAGREIFEN.ELGREIFENMODELLID) ON ELGEINLAGERUNG.ELGDEPOTNR = ELGEINLAGREIFEN.ELGDEPOTNR
WHERE ELGEINLAGERUNG.EINLAGERSTATUS='EIN')
Biber
Biber 27.08.2014 aktualisiert um 13:35:57 Uhr
Goto Top
Moin karlchristian,

eigentlich stehe ich ja auch auf dem Standpunkt "Wenn's funktioniert, dann lassen wir es so..."
Aber ein "SELECT DISTINCT * FROM (.." kann nicht das Optimum sein.

Probier es anstelle deiner Abfrage mal mit
SELECT ELGEINLAGERUNG.ELGDEPOTNR
       , ADRESSE.GPTNR
       , GESCHPARTNER.NAME1
       , ADRESSE.STRASSE
       , ADRESSE.PLZ
       , ADRESSE.ORT
       , ELGEINLAGERUNG.FZGID
       , ELGEINLAGERUNG.FABRIKATKZ
       , ELGEINLAGERUNG.MODCODE
       , ELGEINLAGERUNG.MODBEZEICHNUNG
       , ELGEINLAGERUNG.FAHRGESTELLNR
       , ELGEINLAGERUNG.AMTKENNZ
       , ELGEINLAGERUNG.EINLAGERTYP
       , ELGEINLAGERUNG.EINLAGERSTATUS
       , ELGEINLAGERUNG.EINLAGERDATUM
       , ELGEINLAGERUNG.EINLAGERBIS
       , ELGEINLAGERUNG.ELGLAGERORTID
       , ELGEINLAGERUNG.AUSLAGERDATUM
       , ELGEINLAGERUNG.STORNODATUM
       , depotdaten.SAISONKZ
FROM ELGEINLAGERUNG
  INNER JOIN (ADRESSE
  INNER JOIN GESCHPARTNER
          ON ADRESSE.GPTNR = GESCHPARTNER.GPTNR)
          ON ELGEINLAGERUNG.GPTNRKUNDE = GESCHPARTNER.GPTNR
  INNER JOIN (
--           ELGREIFENMODELL
--           INNER JOIN ELGEINLAGREIFEN
--          ON ELGREIFENMODELL.ELGREIFENMODELLID = ELGEINLAGREIFEN.ELGREIFENMODELLID)
                SELECT distinct r.ELGDEPOTNR
                     , m.SAISONKZ
                FROM ELGREIFENMODELL m
                INNER JOIN ELGEINLAGREIFEN r
                ON m.ELGREIFENMODELLID = r.ELGREIFENMODELLID ) depotdaten
          ON ELGEINLAGERUNG.ELGDEPOTNR = depotdaten.ELGDEPOTNR
WHERE ELGEINLAGERUNG.EINLAGERSTATUS = 'EIN';  

Ich habe deine Abfrage (ohne das drumgewickelte SELECT DISTINCT) genommen und die ursprünglichen Zeilen als Kommentar dringelassen (Zeile 27-29).
Statt GROUP BY wie in der Ur-Abfrage ganz oben habe ich dort ein SELECT DISTINCT genommen, damit du weiterhin eines dabeihast.face-wink


Grüße
Biber