dejoule
Goto Top

SQL-Abfrage Unterabfrage mit Fehler

Hallo an alle


Ich plage mich derzeit mit einer SQL Abfrage herum, die folgende Fehlermeldung bringt:

Meldung 512, Ebene 16, Status 1, Zeile 1
Die Unterabfrage hat mehr als einen Wert zurückgegeben. Das ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, <=, > oder >= folgt oder als Ausdruck verwendet wird.

Meine Abfrage sieht so aus:
select m_MIT.MANR MITARB_VNR, m_ROLLE_UEB.BEZH MIT_ROLLE, m_mit.mitueb,

(select m_Rolle_ueb1.cbezeich
from
ROLLEN M_ROLLE_UEB1,
MITROLLE M_MITROLLE,
MIT m_MIT

where
M_MITROLLE.mit = m_mit.mitueb
and m_rolle_ueb1.nnr = m_mitrolle.rolle
) AS MIT_ROLLE_UEB

FROM
ROLLEN M_ROLLE_UEB,
MIT m_MIT


Die Unterabfrage steht wie Ihr seht im Select Bereich. Da ich der totale Neuling in SQL Bin stehe ich nun ein wenig auf den Schlauch und habe gar keinen Ansatz, wie ich vorgehen muss.

Vielen Dank für Eure Mühen

Content-Key: 59760

Url: https://administrator.de/contentid/59760

Printed on: April 26, 2024 at 05:04 o'clock

Member: Logan000
Logan000 May 25, 2007 at 06:22:38 (UTC)
Goto Top
Wenn ich mich recht erinnere dürfen Unterabfragen im Select nur einen Wert zurück liefern.
Führe die unterabfrage seperat aus. Liefert diese nur einen Wert?
Member: dejoule
dejoule May 25, 2007 at 06:30:07 (UTC)
Goto Top
Hallo Logan000

Na ja, einen Wert nicht, er gibt halt alle Einträge der Spalte an. Diese sollen den Zeilen der äußeren Abfrage zugeordnet werden.
Mitglied: 32067
32067 May 25, 2007 at 07:00:54 (UTC)
Goto Top
Hallo Logan000

Na ja, einen Wert nicht, er gibt halt alle
Einträge der Spalte an. Diese sollen den
Zeilen der äußeren Abfrage
zugeordnet werden.

Hmmm, wie soll ich sagen: Mit SQL anzufangen ohne zu wissen was ein JOIN ist, ist ähhh ... eher kontraproduktiv face-wink, weil das ist DAS Mittel um Tabelle miteinander zu verknüpfen.

Mach dich mal schlau über JOIN, INNER JOIN und OUTER JOIN, dann sollte dir dein Denkfehler klar werden.
Member: AndreasHoster
AndreasHoster May 25, 2007 at 07:13:36 (UTC)
Goto Top
In dem Fall musst Du die Tabellen miteinander verknüpfen (JOIN) nicht eine Unterabfrage verwenden (die darf nämlich hier wirklich nur einen Wert zurückliefern).
Also ungefähr so:
select m_MIT.MANR as MITARB_VNR, m_ROLLE_UEB.BEZH as MIT_ROLLE, m_mit.mitueb, m_Rolle_ueb.cbezeich AS MIT_ROLLE_UEB
FROM
ROLLEN as M_ROLLE_UEB,
MITROLLE as M_MITROLLE,
MIT as m_MIT
where
M_MITROLLE.mit = m_mit.mitueb
and m_rolle_ueb.nnr = m_mitrolle.rolle;
Sollte syntaktisch richtig sein, obs als Ergebnis das bringt was Du willst, ist noch die Frage.
Und ich würde bei Alias immer as schreiben, ist übersichtlicher (wenn man überhaupt Aliase braucht).
Member: Biber
Biber May 25, 2007 at 09:09:55 (UTC)
Goto Top
Moin dejoule,

die von DKrause und AndreasHoster genannten Alternativen zu einem SubSelect (via Joins bzw über eine komplexerer WHERE-Clause) sind die richtigen Antworten).

Dein nicht funktionierendes Statement brauchen wir nicht weiter korrigieren - denn dort ist in diesem Fall die falsche Strategie angewandt.

Ich habe AndreasHosters Schnipsel als formatiert.

Und an alle noch mal die Bitte: bei Fragen zu SQL-Statements bitte immer das konkrete DBMS-Blech angeben, das darunterliegt. Am besten mit Version.

Denn SQL ist ähnlich standardisiert wie nordhessische Dialekte - ein Dorf weiter versteht Dich keiner...

Gruss
Biber