JOIN - Unterabfrage (mehr als einen Wert zurückgegeben)

18/03/2009 - 09:44 von Andreas Mueller | Report spam
Möchte in einer Hauptabfrage eine Unterabfrage einfügen, die allerdings
mehrere Werte zurückgibt (auch soll).

1.

SELECT dbo.Tabelle1. ID, dbo. Tabelle1. Nr, dbo.Tabelle1. Bez
FROM dbo.Tabelle1
WHERE dbo.Tabelle1.ID =
(SELECT dbo.Tabelle2.ID FROM dbo.Tabelle2 WHERE (Name LIKE
'%Mustermann%'))

Dies führt allerdings zur Fehlermeldung:

Meldung 512
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.

http://www.insidesql.org/fehlermeld...eckgegeben


So funktioniert es:

2.

SELECT dbo.Tabelle1. ID, dbo.Tabelle1. Nr, dbo.Tabelle1. Bez,
dbo.viewTabelle2.ID AS viewID
FROM dbo.Tabelle1 LEFT OUTER JOIN
dbo.viewTabelle2.ID ON dbo.Tabelle1. ID = dbo.viewTabelle2.ID
WHERE (dbo.Tabelle1.ID = dbo.viewTabelle2.ID ) OR
(dbo.Tabelle1. Bez LIKE N'%Irgendwas%')


Sicht Tabelle 2 (viewTabelle2)

SELECT dbo.Tabelle2.ID
FROM dbo.Tabelle2
WHERE (dbo.Tabelle2.Name LIKE '%Mustermann%')


Ich brauch allerdings eine Abfrage ohne Zugriif auf eine zusàtzliche Sicht
(Tabelle2).
Nur weiß ich nicht, wie man die Abfrage aus viewTabelle2 in die Haupabfrage
richtig einbindet.
 

Lesen sie die antworten

#1 Elmar Boye
18/03/2009 - 10:11 | Warnen spam
Hallo Andreas,

Andreas Mueller schrieb:
Möchte in einer Hauptabfrage eine Unterabfrage einfügen, die allerdings
mehrere Werte zurückgibt (auch soll).

1.

SELECT dbo.Tabelle1. ID, dbo. Tabelle1. Nr, dbo.Tabelle1. Bez
FROM dbo.Tabelle1
WHERE dbo.Tabelle1.ID =
(SELECT dbo.Tabelle2.ID FROM dbo.Tabelle2 WHERE (Name LIKE
'%Mustermann%'))

Dies führt allerdings zur Fehlermeldung:



das einfachste um den Fehler loszuwerden, wàre hier "IN" anstatt "=":

WHERE dbo.Tabelle1.ID IN (SELECT ...)

Aber im Prinzip machst Du hier einen JOIN und klarer wird es mit:

SELECT T1.ID, T1.Nr, T1.Bez -- und ggf. was aus Tabelle2
FROM dbo.Tabelle1 AS T1
INNER JOIN dbo.Tabelle1 AS T2
ON T1.ID = T2.ID
WHERE T2.Name LIKE '%Mustermann%'

Gruß Elmar

Ähnliche fragen