MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 11.11.2017, 14:04   #1
th_koeln_student
Neuer Benutzer
Neuer Benutzer
Standard Admin : MSSQL - SQL Abfrage verschachteln

Moin Leute, ich komme irgendwie nicht weiter:

Folgenden SQL Befehl für eine Abfrage war vorgegeben:
Code:

SELECT Studenten.MatrikelNr, Studenten.Name, Modulhandbuch.Modulname
FROM Modulhandbuch INNER JOIN (Studenten INNER JOIN Teilnahme ON Studenten.MatrikelNr = Teilnahme.MatrikelNr) ON Modulhandbuch.ID = Teilnahme.Modul_ID
WHERE (((Teilnahme.Versuch)=2));
Aufgabe war es diesen Befehl zu verschachteln.
ich habe das ganze dann zuerst mit where Befehlen Ausgedrückt:

Code:

SELECT Studenten.MatrikelNr, Studenten.Name, Modulhandbuch.ModulName
from Studenten, Modulhandbuch, Teilnahme
where Studenten.MatrikelNr=Teilnahme.MatrikelNr AND
Modul_ID=Modulhandbuch.ID AND
(Versuch)=2;
so jetzt möchte ich diese where Befehle verschachteln , sprich mit Unterabfragen.
Nur das gelingt mir nicht ! Hat jemand einen Ansatz?

Gruß
th_koeln_student ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 14:32   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Willkommen im Forum.

Ehrlich gesagt, verstehe ich nicht, was das soll ...
Auch sieht mir die JOIN Syntax (mit den Klammern) eher nach Jet (Access) als nach T-SQL aus.
So schon eher:
Code:

SELECT S.MatrikelNr, S.Name, M.Modulname
  FROM Studenten S
  INNER JOIN Teilnahme T ON S.MatrikelNr = T.MatrikelNr
  INNER JOIN Modulhandbuch M ON M.ID = T.Modul_ID
WHERE T.Versuch = 2

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 15:09   #3
th_koeln_student
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo vielen danke für deine Antwort,

das diese Aufgabe keinnen sinn ergibt ist mir ebenfalls klar , nur ist das nun mal die Aufgaben Stellung der Professorren

Code:

SELECT Studenten.MatrikelNr, Studenten.Name, Modulhandbuch.Modulname
FROM Modulhandbuch INNER JOIN (Studenten INNER JOIN Teilnahme ON Studenten.MatrikelNr = Teilnahme.MatrikelNr) ON Modulhandbuch.ID = Teilnahme.Modul_ID
WHERE (((Teilnahme.Versuch)=2));
Dieser Code war vorgegeben (In MS Access 2016)

Aufgabenstellung war lediglich, dass diese Abfrage in verschachtelter Form aufzuschreiben !

Mein Ansatz war daher, die INNER JOIN Abfrage in eine WHERE Abfrage zu wandeln und diese dann zu verschachteln, da im Skript eine Verschachtelung von Where Abfragen behandelt wurde.

Anbei das Beispiel aus dem Skript:

Unverschachtelt:

Code:

Select Schueler.Name, Schueler.Vorname
From Schueler,Klassen,Lehrer
where Schueler.Knummer=Klassen.KNummer AND
Klassenlehrer=Lnummer AND
Lehrer.Name="Hitzer";
Verschachtelt:
Code:

Select Name, Vorname
From Schueler
where KNummer IN
(Select Knummer
form Klassen
Where Klassenlehrer IN
(Select LNummer
from Lehrer
where Name= "Hitzer"));
th_koeln_student ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 15:20   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

ist das nun mal die Aufgaben Stellung der Professorren

Dazu fällt mir ein "Unter den Talaren: Muff von tausend Jahren".

Aber jetzt verstehe ich, was mit "verschachtelt" gemeint ist.
Schlechter Stil. Warum bringen die Euch sowas bei???
Aber ich bitte Dich: mit etwas Abstraktionsvermögen solltest Du doch das Beispiel in #3 auf Deine Aufgabe hin umsetzen können ...

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 16:02   #5
th_koeln_student
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

ja natürlich das völliger Schwachsinn aber es wird nunmal benotet und dann sollte man das lösen

verschachteln in Unterabfragen,

ich habe es versucht, sogar mehrmals , nur komme ich leider nicht auf das gewünschte Ergebnis. Er gibt mir am Ende nicht die Werte raus die rauskommen sollen , daher bin ich arg am verzweifeln und die Sinnlosigkeit der Aufgabe macht es da nicht einfacher !
th_koeln_student ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 22:04   #6
hcscherzer
MOF Guru
MOF Guru
Standard

Code:

select s.matrikelnr, s.name,
 (select m.modulname from modulhandbuch m
  where m.id in (select t.modul_id from teilnahme t
  where t.versuch = 2 and t.matrikelnr = s.matrikelnr))
from studenten s
where s.matrikelnr in
(select t1.matrikelnr from teilnahme t1
 where t1.versuch = 2)

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 21:14   #7
th_koeln_student
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

vielen dank
noch eine frage :
Code:

SELECT Studenten.MatrikelNr, Studenten.Name, Modulhandbuch.Modulname
FROM Modulhandbuch INNER JOIN (Studenten INNER JOIN Teilnahme ON Studenten.MatrikelNr = Teilnahme.MatrikelNr) ON Modulhandbuch.ID = Teilnahme.Modul_ID
WHERE (((Teilnahme.Versuch)=2));
diese Form stellt doch schon eine verschachtelte Form der Inner Join Funktion da oder ? Oder kann man diese Form noch "verschachteln)

Gruß und vielen Dank!
th_koeln_student ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 22:27   #8
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

eine verschachtelte Form der Inner Join Funktion

Nö.
Jedenfalls nicht so "verschachtelt" wie Du in #3 beispielhaft gezeigt und ich in #6 versucht habe.
Das sieht nur verschachtelt aus, weil die Jet (Access) Syntax das so darstellt mit allen JOIN zuerst, den ON gesammelt danach und den Klammern.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 23:32   #9
ebs17
MOF Guru
MOF Guru
Standard

Nachfolgend hast Du die Umformung in eine Schachtelung, die man hoffentlich erkennen kann:
Code:

SELECT 
   S.MatrikelNr, 
   S.Name, 
   X.Modulname 
FROM 
   Studenten AS S 
      INNER JOIN 
         (
            SELECT 
               M.Modulname, 
               T.MatrikelNr 
            FROM 
               Modulhandbuch AS M, 
               (
                  SELECT 
                     Modul_ID, 
                     MatrikelNr 
                  FROM 
                     Teilname 
                  WHERE 
                     Versuch = 2 
               ) AS T 
            WHERE 
               M.ID = T.Modul_ID) AS X 
      ON S.MatrikelNr = X.MatrikelNr
Jetzt kannst Du Dir vom Prof erklären lassen, warum diese Abfrage vermutlich effizienter ist als die Vorgabe. Mal sehen, ob Ihr auch etwas Richtiges lernen könnt bei solchen Übungen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.