creamycewie

TSQL - Unterabfrage mit mehreren Ergebissen aufschlüsseln

Hallo Leute.

Bevor ich zur Frage komme, erst mal die Ausgangssituation:

Ich habe folgende 2 Tabellen mit den folgenden Beispielinhalten:

text
blobkeycontentetc.....
BPCCFFDBA5-D6A5-452A-ADF0-A61795061033Hier steht ein Textetc....
BPCF8EE935-DE73-4A6A-BC84-AC794356E740Hier steht ein Textetc....
BP49A3451D-1A42-4889-8AD3-C0BC7871FF1CHier steht ein Textetc....

BELEGP
belegtypbelegnummerKENNUNG
R20210003CCFFDBA5-D6A5-452A-ADF0-A61795061033
R20210003CF8EE935-DE73-4A6A-BC84-AC794356E740
R2021001749A3451D-1A42-4889-8AD3-C0BC7871FF1C

Der Wert "Blobkey" setzt sich wie folgt zusammen:
Kürzel "BP"
+
KENNUNG aus der tabelle Belegp


Ich versuche nun mit einem SELECT-Statement alle Datensätze aus der Tabelle "text" auszulesen, die zu einem der Datensätze aus Belegp passen.

Mein Statement sieht so aus:
select * from text where blobkey = 'BP'+(SELECT CONVERT(NVARCHAR(36),Kennung) FROM BELEGP WHERE belegtyp = 'R' and Belegnummer = 'xxxxxxxx' )  

Wenn ich nun als Belegnummer zb "20210017" angebe, funktioniert es perfekt, da es in der Belegp nur einen Datensatz mit dem Belegtyp "R" und der Belegnummer "20210017" gibt.

Nehme ich jedoch zB die Belegnummer "20210003" erhalte ich folgenden Fehler:
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.

Der Fehler kommt scheinbar daher, dass es mehr als einen entsprechenden Datensatz in der Belegp gibt.

Wie müsste ich das Statement umbauen, um pro entsprechendem DS eine zeile zu erhalten?

Danke & LG
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 637377

Url: https://administrator.de/forum/tsql-unterabfrage-mit-mehreren-ergebissen-aufschluesseln-637377.html

Ausgedruckt am: 17.07.2025 um 23:07 Uhr

em-pie
Lösung em-pie 05.01.2021 aktualisiert um 12:36:54 Uhr
Moin,

Dein Problem ist ja, dass du mehrere Rückgabewerte aus dem Subselect erhälst.

Besser ist es hier (immer) ,mit einem JOIN zu arbeiten:

SELECT 
text. * 
FROM 
 text 
INNER JOIN belegbp
 on text.blobkey = CONCAT('BP', belegbp.kennung)  
WHERE  
 belegtyp = 'R'   
 AND belegnummer = 'xxxxxxxx'  

Gruß
em-pie