Zum Inhalt springen

Subselect statt cross join


bla blu

Empfohlene Beiträge

ein subselect macht bei der abfrage keinen sinn, generell macht die abfrage fuer mich kein sinn.. wieso verknuepft man jedes personal mit jedem personal?

Na ja, mit sich selbst verknüpft er die Mitarbeiter ja nicht. Vielleicht will er damit die Begegnungen bei einem Sportwettkampf vorbereiten. Jeder gegen jeden mit Hin-und Rückspiel oder so...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na ja, mit sich selbst verknüpft er die Mitarbeiter ja nicht. Vielleicht will er damit die Begegnungen bei einem Sportwettkampf vorbereiten. Jeder gegen jeden mit Hin-und Rückspiel oder so...

oha ok, daran hab ich nich gedacht gehabt.

aber auch fuer das erklaerte bsp von dir macht nen subselect kein sinn, da ich ja dann eh die results aus beiden tabellen brauche.

Link zu diesem Kommentar
Auf anderen Seiten teilen

geht mehr ums Verständnis, z. B. Abarbeitungsreihenfolge.

Anstoss war Beispiel in SQL for Dummies:

select tm1.empID

from transmaster tm1

group by tm1.empid

having max(tm1.netamount) >= all

(select 2 * avg (tm2.netAmount)

from transmaster tm2

where tm1.empdID <> tm2.empID);

transmaster: Transaktionen von Verkäufern. Ergebnis liefert Mitarbeiter ID aller Verkäufer, die mindestens das doppelte Verkaufsvolumen vom Durchschnitt aller anderen Verkäufer haben.

Wollte nur das Ausschlußprinzip tm1.empID <> tm2.empID extrahieren, wie oben mit subselect.

Aber wie bringe ich die alias-deklaration außen an? Mit einem äußeren select, das genau das innere zurückliefert?

Bearbeitet von bla blu
Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber wie bringe ich die alias deklaration außen an? gibt es ein äußeres select, das genau das innere zurückliefert?

dein subselect muss dir ja eine spalte mit n ergebnissen liefern und daran knuepfst du halt an..

SELECT * FROM t1

WHERE

t1.ein_feld = / IN / <> / usw... (select t2.ein_feld FROM t2 where t1.feld = t2.feld)

du kannst von ausserhalb, meines wissens nach, nicht auf die ergebnisse deines subselects zugreifen

Link zu diesem Kommentar
Auf anderen Seiten teilen

ist zwar etwas anderes, aber wenn das subselect im "From"-clause steht, dann kann man auf die inhalte des subselects zugreifen.

einfaches beispiel:

SELECT a2.*

FROM (Select * from artikel) a2

where a2.preis = 10

grüße

delen

EDIT:

erweitertes beispiel:

SELECT a2.*

FROM test a,(Select * from test) a2

where a.preis1 = a2.preis1

Bearbeitet von delen
Link zu diesem Kommentar
Auf anderen Seiten teilen

select * from employee e1

where e1.empID in (select e2.empID from employee e2 where e1.empID <> e2.empID);

ganz klar das bzw warum es leer ist

du moechtest alle daten saetze haben wo e1.empId im subselect ist - du schliest im subselect aber den datensatz aus welcher gereade in e1.empId ist

bsp:

ids = 1, 2, 3, 4

select ... wo 1 IN (select subId wo 1 <> subId)

subID ist in diesem bsp 2, 3, 4

diese bedingung kann also nie erfuellt sein

hoffe habs richtig erklaert :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

:upps danke. Der innere select wäre das gewünschte Ergebnis 234 (oder besser wie ganz oben 234, 134, 124, 123. Darum habe ich einen äußeren select gesucht, der den inneren liefert. Aber mit einem einzigen wirds wohl nicht gehen?

Bearbeitet von bla blu
Link zu diesem Kommentar
Auf anderen Seiten teilen

select * from employee e1

where e1.empID in (select e2.empID from employee e2 where e1.empID <> e2.empID);

ich möchte einfach das ergebnis dieses subselects als ausgabe (2,3,4), ohne wie im ersten Beispiel

select * from employee e1, employee e2

where e1.empID <> e2.empID;

einen join zu verweden, ob es sinn macht, oder nicht, mehr gedankenspiel.

Um im correlated subselect ein 2. alias zu verwenden, das nicht gleich dem ersten ist, muß ich es außen deklarieren. Geht wahrscheinlich nur in verbindung mit einem select - where oder having. Und dieses Select muss dann genau das subselect liefern. :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

oha ok, daran hab ich nich gedacht gehabt.

aber auch fuer das erklaerte bsp von dir macht nen subselect kein sinn, da ich ja dann eh die results aus beiden tabellen brauche.

Das sehe ich auch so, dafür hätte ein Subselect keinen Sinn. Aber es ist die einzige praktische Anwendung für einen Cross-Join, die mir jemals in der Praxis unter gekommen ist.

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...