7. Juli 200916 j Hi, nur aus interesse und anfängerfrage, aber kann man select * from employee e1, employee e2 where e1.empID <> e2.empID; auch über ein subquery lösen? danke.
7. Juli 200916 j 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
8. Juli 200916 j Und wie würde sowas aussehen in z.B. MS Server (2008), wenn es nicht allzu kompliziert ist?
8. Juli 200916 j ein subselect macht bei der abfrage keinen sinn, generell macht die abfrage fuer mich kein sinn.. wieso verknuepft man jedes personal mit jedem personal?
8. Juli 200916 j 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...
8. Juli 200916 j 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.
8. Juli 200916 j 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 8. Juli 200916 j von bla blu
8. Juli 200916 j 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
8. Juli 200916 j 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 8. Juli 200916 j von delen
8. Juli 200916 j 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?
8. Juli 200916 j 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
8. Juli 200916 j :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 8. Juli 200916 j von bla blu
8. Juli 200916 j 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
8. Juli 200916 j 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:
8. Juli 200916 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.