Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Probleme mit Alias in Unterabfragen

Dieses Thema im Forum "Oracle" wurde erstellt von telekraft, 20 Januar 2015.

  1. telekraft

    telekraft Benutzer

    Hallo Leute,

    Ich schreib bald in der Uni meine Prüfung in Datenbanken wir arbeiten mit Oracal SQL DEV 4
    und ich übe zurzeit mit dieser Internetseite(http://sqlcoach.informatik.fh-kl.de/sqlcoach/exercise?status=get&view=task)

    Ich bin zurzeit bei den Joins u. Unterabfragen und hab überhaubt keine Ahnung wie die folgende Aufgabe zu lösen ist. (http://sqlcoach.informatik.fh-kl.de...nario_id=1&number=4.2&view=get&taskgroup_id=5)

    Ich hatte mir soweit überlegt

    select Abtname, budget
    from Abteilung
    where Budget exists ()
    order by Abtname, buget

    Leider hab ich hier keine Ahnung wie ich Aliase einführ um dann die Unterabfrage zu gesallten weil mir allgemein noch die Logik mit den Aliasen fehlt...selben Problem habe ich nämlich auch bei den Joins.

    Könnt ihr mir vllt helfen wie ich hier am besten vorgehe um auf die richtige Lösung zu kommen.

    Mfg Chris
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Gängige Syntax:
    Explizit
    Code:
    Select a.*
    From deine_tabelle as a
    Implizit
    Code:
    Select a.*
    From deine_tabelle a
    Besondere Schreibweisen (Sonderzeichen, Leerzeichen, Groß-/Kleinschreibung)
    Code:
    Select "deine tabelle".*
    From deine_tabelle as "deine tabelle"
     
    telekraft gefällt das.
  3. telekraft

    telekraft Benutzer

    Dann könnte ich es doch so machen.

    select 1a.Abtname, 1a.budget
    from Abteilung as 1a
    where
    1a.Budget
    exists (select 2a.BUDGET from Abteilung as 2a)

    Funktioniert aber nicht
     
  4. telekraft

    telekraft Benutzer

    Bzw, wenn ich nur 1 Alias pro abfrage einführ wie hier

    select Abtname, budget from Abteilung where Budget exists (select a.budget, from Abteilung as a)

    Funktioniert es auch nicht.

    Wie gesagt mir fehlt in der aufgabe total die Logik :(
     
  5. ukulele

    ukulele Datenbank-Guru

    Ist auch nicht richtig. Hinter dem WHERE kommt direkt das EXISTS welches die Bedingung einleitet (besser kann ich es nicht ausdrücken :) ). Ich glaube du willst in deinem EXISTS die Tabelle Budget abfragen, nur so macht es überhaupt Sinn (Die Links gehen bei mir nicht und die Aufgabenstellung kenne ich nicht). Du musst aber noch irgendeine sinnvolle Verknüpfung der beiden Tabellen haben.

    In jedem Fall ergibt der Code keinen Sinn. Poste vieleicht mal die Aufgabe.
     
  6. telekraft

    telekraft Benutzer

    ABTEILUNG ( ABTNR , ABTNAME , BUDGET , CHEFNR )
    AKTE ( PERSNR , DATUM , POSITION , GEHALT )
    PERSONAL ( PERSNR , VNAME , NNAME , PROJNR , TELEFONNR , GEHALT )
    PROJEKT ( PROJNR , BUDGET , ABTNR )


    Primärschlüssel sind Unterstrichen
    Fremdschlüssel sind Rot

    AUFGABE: Geben Sie alle Abteilungen (abtname,budget) nach dem Budget und dem abtname sortiert aus, für die es noch mindestens eine weitere gibt, die über das gleiche Budget verfügt.

    Meine Lösung:
    select a.Abtname, a.budget from Abteilung as a where exists budget(select BUDGET from Abteilung where Budget = a.budget)

    So hätte ich es gemacht das is das einzige was mir dazu noch einfällt ich hab wie gesagt probleme mit den Alias bezeichnungen weil das für mich noch too unverständlich is
     
  7. Distrilec

    Distrilec Datenbank-Guru

    Wie @ukulele schon sagte... Die Abfrage macht keinen Sinn... Selbst wenn die Syntax richtig wäre, würden immer ALLE Datensätze zurückgeliefert.
    Weil du einfach nur abfragst ob das Budget in der derzeitigen Tabelle vorhanden ist... Was ja immer der Fall ist ;)

    Edit:
    Wie wärs einfach mit
    Code:
    Select abteilung, budget
    From abteilung
    group by abteilung, budget having count(*) > 1
    ?? :)

    Edit2:
    Nein, das ist falsch.... Man sollte denken bevor man schreibt ^^

    Edit3:
    Das ist aber richtig.... :oops:
    Code:
    Select abteilung, budget
    From   abteilung
    Where (Select count(*) From abteilung abt Where abt.budget = budget) > 1
     
    Zuletzt bearbeitet: 20 Januar 2015
  8. telekraft

    telekraft Benutzer

    So jetzt nochmal Step by Step die Standart Abfrage ohne Unterabfrage müsste ja so aussehen.

    Code:
    select Abtname, budget
    from Abteilung
    order by Budget, Abtname
    Damit geb ich alle ABTNAME mir dazugehörigen Budget sortiert nach dem Budget, ABTNAME

    Jetzt will ich mittels Unterabfrage wissen welche Abteilung noch mindestens 1 weitere Abteilung mit dem gleichen Budget hat.

    Also müsste ja exists schonmal richtig sein nur die Unterabfrage is Müll weil ich total den Faden verloren habe. Bräuchte mal nen Ansatz
     
  9. Distrilec

    Distrilec Datenbank-Guru

    Ansatz:
    Du musst in der Unterabfrage zählen, wie oft das Budget (über alle Abteilungen verteilt) vorhanden ist.
     
  10. telekraft

    telekraft Benutzer


    Code:
    select Abtname, budget
    from Abteilung
    where exists (Select count(BUDGET) from Abteilung)
    order by Budget, Abtname
    So stimmt aber immer noch nicht genau, es wird aber langsam.
     
  11. Distrilec

    Distrilec Datenbank-Guru

    Na dann tüftel du mal ein bisschen :)
     
  12. telekraft

    telekraft Benutzer

    Na gut ich hab es jetzt raus bekommen aber ohne exists
    Code:
    select abtname, budget from abteilung where budget IN (select budget from abteilung group by budget having count(budget)>1) order by budget
     
    ukulele gefällt das.
  13. Distrilec

    Distrilec Datenbank-Guru

    Das sollte die exists-Variante sein:
    Code:
    Select t.abtname,
           t.budget
    From   abteilung t
    Where  exists (Select budget
                      From   abteilung
                      Where  budget = t.budget
                      Group  By budget
                      Having Count(budget) > 1)
    Order  By budget
    (Bin erst beim ersten Kaffee)
     
    ukulele gefällt das.
  14. ukulele

    ukulele Datenbank-Guru

    Man kann bei EXISTS eigentlich auch mit SELECT 1 in der Unterabfrage arbeiten. Nicht das das schneller wäre aber ich finde es eleganter.
     
  15. Distrilec

    Distrilec Datenbank-Guru

    Wüsste nicht was daran eleganter sein sollte... Macht das ganze weder lesbarer noch leichter zu verstehen... Aber ja, man könnte auch einfach eine 1 Selektieren :D
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden