bla blu Geschrieben 7. Juli 2009 Teilen Geschrieben 7. Juli 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 7. Juli 2009 Teilen Geschrieben 7. Juli 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bla blu Geschrieben 8. Juli 2009 Autor Teilen Geschrieben 8. Juli 2009 Und wie würde sowas aussehen in z.B. MS Server (2008), wenn es nicht allzu kompliziert ist? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 ein subselect macht bei der abfrage keinen sinn, generell macht die abfrage fuer mich kein sinn.. wieso verknuepft man jedes personal mit jedem personal? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bla blu Geschrieben 8. Juli 2009 Autor Teilen Geschrieben 8. Juli 2009 (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 8. Juli 2009 von bla blu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
delen Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 (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 8. Juli 2009 von delen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bla blu Geschrieben 8. Juli 2009 Autor Teilen Geschrieben 8. Juli 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bla blu Geschrieben 8. Juli 2009 Autor Teilen Geschrieben 8. Juli 2009 (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 8. Juli 2009 von bla blu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bla blu Geschrieben 8. Juli 2009 Autor Teilen Geschrieben 8. Juli 2009 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 8. Juli 2009 Teilen Geschrieben 8. Juli 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.