Probleme mit Alias in Unterabfragen

telekraft

Benutzer
Beiträge
9
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
 
Werbung:
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"
 
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
 
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 :(
 
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.
 
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
 
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:
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
 
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
 
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)
 
Man kann bei EXISTS eigentlich auch mit SELECT 1 in der Unterabfrage arbeiten. Nicht das das schneller wäre aber ich finde es eleganter.
 
Werbung:
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
 
Zurück
Oben