Abfragen über zwei oder mehr Tabellen

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von sim4000, 09.11.2006.

  1. #1 sim4000, 09.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Nabend.

    Ich hab heut in der Schule mal wieder SQL-Datenbanken gehabt, und schon jukt es mich wieder in den fingern.
    Es handelt sich nich um Hausaufgeben. Is reine neugier.

    Ich habe in einer Datenbank zwei Tabellen. Eine Tabelle beinhaltet zwei Spalten (Klassen, Klassenlehrer) und in der anderen stehen Schueler, die den verschiedenen Klassen mit einen forengekey (oder so...) zugeordnet werden.

    Ich kann damit dann Abfragen welcher Schüler in welcher Klasse ist.

    Nun aber meine Frage:
    Ich hab noch einige Klassen erstellt, die noch keinem Schüler zugeordnet sind. Nun möchte ich abfragen und ausgeben lassen, welche Klassen noch keine schueler haben.
    Geht mit "join less" hab ich gelesen... Verstehe aber nich ganz wie.
    Hab die genauen Infos zur Datenbank als Anhang angehängt.
    Den Anhang schueler.txt betrachten

    Ab
    Code:
    --
    -- Klassen anzeigen, die nicht Schülern zugeteilt sind
    --
    
    kommen meine bisherigen versuche.

    Wie kann man das machen?
    Mfg, sim4000.
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 09.11.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Geht viel einfacher mit subselects.

    Ich hab mir dein Zeug nicht angeschaut, aber angenommen du hast eine Tabelle namens "class" mit dem Feld "id" und eine Tabelle "student" mit den Feldern "student_id" und "class_id", dann würdest du mit dieser

    Code:
    select id from class
     where id not in 
        select distinct class_id from student;
    Abfrage alle class-ids zurückgeliefert bekommen denen noch kein schüler zugeordnet ist.
     
  4. #3 sim4000, 09.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Code:
    select fk_klassen_id from klassen 
    where id not in 
    select distinct klassen_id from schueler;
    dann kommt
    Code:
    you have an error in the syntax. near "select distinct klassen_id from schueler"
    Haste dich vielleicht verschrieben?
    Mfg, sim4000.
     
  5. caba

    caba GESPERRT!

    Dabei seit:
    13.08.2002
    Beiträge:
    351
    Zustimmungen:
    0
    Code:
    SELECT DISTINCT(klassen_id) FROM schueler
     
  6. #5 sim4000, 09.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Code:
    select fk_klassen_id from klassen where id not in SELECT DISTINCT(klassen_id) FROM schueler;
    
    Geht immer noch nich...
    Mfg, sim4000.
     
  7. #6 Peregrine, 10.11.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Das kommt ganz auf den SQL Dialekt an, den du nutzt.
    Welche Datenbank ist da in Betrieb? Mysql, Oracle, ... ?
    Kriegen wir schon hin :-)
     
  8. #7 sim4000, 10.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    MySQL 5, hätte ich sagen sollen....

    Mfg, sim4000.
     
  9. #8 supersucker, 10.11.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ja,

    hab mich verschrieben.

    Mach es mal so

    Code:
    select fk_klassen_id from klassen where id not in (SELECT DISTINCT(klassen_id) FROM schueler);
    Das klappt bei mir.

    Hatte vergessen das man, wenn man ein subselect nach "in" macht den subselect nochmal klammern muss.
     
  10. #9 sim4000, 10.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Supa, es funzt. Großes Dankesehr an alle.
    So siehts jetzt bei mir aus:
    Code:
    select
    	fk_klassen_id as Klasse,
    	klassenlehrer as Klassenlehrer
    from
    	klassen
    where 
    	fk_klassen_id not in
    	(select [B]distinct(klassen_id)[/B] from schueler);
    Aber eine Frage hab ich noch:
    Wozu ist das distinct (siehe fette schrift)? reicht nich auch einfach klassen_id?
    Mfg, sim4000.
     
  11. #10 supersucker, 10.11.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Das du mehrfach vorhandene Einträge nur einmal zurückgeliefert kriegst.
     
  12. #11 sim4000, 10.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    aja. Wieder schlauer geworden. :)
    Nochmals danke für die Hilfe.

    Mfg, sim4000.
     
  13. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    sorry, aber das distinct schlüsselwort ist doch schon ein teures? ich geh mal davon aus, dass schüler niemals zweimal vorkommen oder??
     
  14. #13 sim4000, 10.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Eigendlich nich...
    Die Schüler sind in zwei zellen aufgeteilt:
    Name und Vorname.

    Das Nachname oder Vorname mal doppelt vorkommen, kann schon mal vorkommen...
    Mfg, sim4000.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 heady, 10.11.2006
    Zuletzt bearbeitet: 10.11.2006
    heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    ich dachte wir gehen von der id aus??

    [edit] außerdem wollte ich nur sagen, dass der distinct befehl alle doppelten
    aussortieren muss, und dass sich das auf die performance auswirken kann....
    aber bei so kleinen schüler-klassen tablen is das egal...
     
  17. #15 sim4000, 11.11.2006
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Noch mal gaaanz ruhig zum verständnis:
    Tabelle 1: klassen.png
    Tabelle 2: schueler.png

    In der einen stehen die Klassen mit samt Klassenlehrer.
    In der anderen, stehen name, vorname, klasse.
    Und die Klasse in beiden Tabellen werden verwendet um diese bei einer Abfrage zu verbinden. Und nun wollte ich Prüfen, welche Klassen, die ja in der Tabelle Klassen stehen, nicht in der Tabelle schueler vorkommen. Das hab ich dannn ja mit eurer Hilfe mit:
    Code:
    select
    	fk_klassen_id as Klasse,
    	klassenlehrer as Klassenlehrer
    from
    	klassen
    where 
    	fk_klassen_id not in
    	(select distinct(klassen_id) from schueler);
    hinbekommen. Und jeder Schüler kommt ja nur in einer Klasse vor.
    Also es Funktioniert. Gibts jetzt noch irgendein Problem?

    Mfg, sim4000.
     
Thema:

Abfragen über zwei oder mehr Tabellen

Die Seite wird geladen...

Abfragen über zwei oder mehr Tabellen - Ähnliche Themen

  1. CDROm devices abfragen

    CDROm devices abfragen: Hallo Ich versuche per wodim -- devices, bzw. wodim --scanbus, meine CD, DVD-ROM, RAM Laufwerke zu identifizieren, leider giben obigne Befehle...
  2. Mit bash mysql in Schleife abfragen

    Mit bash mysql in Schleife abfragen: Servus @all, ich habe jetzt die ganze Nacht gekämpft, aber es will nicht wie ich mir das vorstelle. Meine Tabelle: id int(11) NOT NULL...
  3. CRON als Root soll ODBC Abfragen machen, kennt jedoch die Zugangsdaten im Cron nicht

    CRON als Root soll ODBC Abfragen machen, kennt jedoch die Zugangsdaten im Cron nicht: Hallo Gemeinde, das ist ja mal ein Titel :-) Nun gut. Schlicht und einfach, ich muss per Cron SQL Abfragen per ODBC fahren, dazu nutze ich hier...
  4. Return von system(..) aus anderem Prozess abfragen

    Return von system(..) aus anderem Prozess abfragen: Hi, ich möchte gerne in Prozess 1 den returnwert von system(command) im Prozess 2 abfragen, habe allerdings keine ahnung wie das möglich ist, hat...
  5. Tastaturstatus remote abfragen ??

    Tastaturstatus remote abfragen ??: Hallo, kennt jemand eine Möglichkeit den Status einer Tastatur remote abzufragen. Ich hab schon xkbvled und xkbwatch probiert, sehe da aber...