Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

prinzipiell ja, kommt aber auf den SQL-standard und/oder das DBMS an.

ein CROSS JOIN liefert ein kartesisches (direktes kreuz-)produkt zweier ergebnismengen, das mit dem subquery dementsprechend nachgebaut werden muss.

s'Amstel

Geschrieben

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

Geschrieben
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...

Geschrieben
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.

Geschrieben (bearbeitet)

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
Geschrieben
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

Geschrieben (bearbeitet)

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
Geschrieben

danke delen,

t3d:

select * from employee e1

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

sowas habe ich mir vorgestellt, liefert aber leere menge. weil e1.empID immer = e2.empID?

Geschrieben

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

Geschrieben (bearbeitet)

: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
Geschrieben

tut mir leid, aber wirklich vestanden was du machen moechtest hab ich nich :schlaf:

vielleicht kannst du ja mal in worten fassen was du ausdruecken moechtest

Geschrieben

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:

Geschrieben
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

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...