creamycewie
Goto Top

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
blobkey content etc.....
BPCCFFDBA5-D6A5-452A-ADF0-A61795061033 Hier steht ein Text etc....
BPCF8EE935-DE73-4A6A-BC84-AC794356E740 Hier steht ein Text etc....
BP49A3451D-1A42-4889-8AD3-C0BC7871FF1C Hier steht ein Text etc....

BELEGP
belegtyp belegnummer KENNUNG
R 20210003 CCFFDBA5-D6A5-452A-ADF0-A61795061033
R 20210003 CF8EE935-DE73-4A6A-BC84-AC794356E740
R 20210017 49A3451D-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

Content-ID: 637377

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

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

em-pie
Lösung em-pie 05.01.2021 aktualisiert um 12:36:54 Uhr
Goto Top
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