Abfrage

26/10/2009 - 11:38 von Dirk Herwig | Report spam
Hallo,

ich habe ein Problem mit einer Abfrage:
SELECT a.LID, a.LGID, a.LName, b.Time,
(SELECT LgName
FROM layout_folder
WHERE (a.LGID = LGID) OR
(a.LGID IS NULL))
AS Expr1
FROM layouts_layoutcontainerobjects AS b CROSS JOIN
layouts AS a
WHERE (b.LCID = 22)

Ich habe 3 Tabellen:
layouts:
LID - Primàrschlüssel
LGID - Fremdschlüssel, kann auch NULL sein
LName - Varchar

layout_folder:
LGID - Primàrschlüssel
LgName - VarChar

layout_layoutcontainerobjects:
OCID - Primàrschlüssel
LCID - Fremdschlüssel
LID - Fremdschlüssel (wie layouts)
Time - int

Ich erhalte beim ausführen folgenden Fehler:

Microsoft Visual Studio

Fehler bei der SQL-Ausführung.

Ausgeführte SQL-Anweisung: SELECT a.LID, a.LGID, a.LName, b.Time, (SELECT
LgName FROM layout_folder WHERE (a.LGID = LGID) OR (a.LGID IS NULL)) AS
Expr1 FROM layouts_layoutcontainerobjects AS b CROSS JOIN layouts AS a WHERE
(b.LCID = 22)
Fehlerquelle: .Net SqlClient Data Provider
Fehlermeldung: 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.

OK Hilfe


Könnt ihr mir hier weiterhelfen?

Dirk
 

Lesen sie die antworten

#1 Christoph Ingenhaag
26/10/2009 - 13:21 | Warnen spam
Hallo Dirk,

das Problem ist die Unterabfrage im Select:
(SELECT LgName
FROM layout_folder
WHERE (a.LGID = LGID) OR
(a.LGID IS NULL))


Da bekommst du mehr als einen Datensatz zurück, wo nur ein Datensatz
verarbeitet werden kann: Du hast also zu LID, a.LGID, a.LName, b.Time mehr
als einen LgName zu mindestens einer Zeile, die mit der Bedingung (a.LGID =
LGID) OR(a.LGID IS NULL)) verknüpft sind.
Entweder du verhinderst mit z.B. top 1 oder einer passenden Gruppierung das
mehr als ein Satz zurückgeliefert wird oder du ànderst die Bedingung oder du
schreibst die mehrfach vorkommenden Werte hintereinander (siehe hier:
http://groups.google.de/group/micro...07a1ede96f
) oder du verknüpfst die Unterabfrage mittels eines Joins oder du bereinigst
ggf. falsche Daten in der Tabelle layout_folder...

Viele Grüße
Christoph


"Dirk Herwig" schrieb im Newsbeitrag
news:hc3uah$444$02$
Hallo,

ich habe ein Problem mit einer Abfrage:
SELECT a.LID, a.LGID, a.LName, b.Time,
(SELECT LgName
FROM layout_folder
WHERE (a.LGID = LGID) OR
(a.LGID IS NULL))
AS Expr1
FROM layouts_layoutcontainerobjects AS b CROSS JOIN
layouts AS a
WHERE (b.LCID = 22)

Ich habe 3 Tabellen:
layouts:
LID - Primàrschlüssel
LGID - Fremdschlüssel, kann auch NULL sein
LName - Varchar

layout_folder:
LGID - Primàrschlüssel
LgName - VarChar

layout_layoutcontainerobjects:
OCID - Primàrschlüssel
LCID - Fremdschlüssel
LID - Fremdschlüssel (wie layouts)
Time - int

Ich erhalte beim ausführen folgenden Fehler:

Microsoft Visual Studio

Fehler bei der SQL-Ausführung.

Ausgeführte SQL-Anweisung: SELECT a.LID, a.LGID, a.LName, b.Time, (SELECT
LgName FROM layout_folder WHERE (a.LGID = LGID) OR (a.LGID IS NULL)) AS
Expr1 FROM layouts_layoutcontainerobjects AS b CROSS JOIN layouts AS a
WHERE (b.LCID = 22)
Fehlerquelle: .Net SqlClient Data Provider
Fehlermeldung: 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.

OK Hilfe


Könnt ihr mir hier weiterhelfen?

Dirk

Ähnliche fragen