Error 1801 bei Unterabfrage

20/05/2008 - 21:26 von Winfried Wolf | Report spam
Hallo,

Die Vorbereitung (VFP9SP2):
CREATE TABLE Table1 (feld1 I)
CREATE TABLE Table2 (feld1 I)


Ein SQL-Select dieser Form funktioniert:

SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table2 WHERE Table2.Feld1=Table1.Feld1 AND .T.)

Ein SQL-Select dieser Form liefert Fehler 1801:

SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table2 WHERE Table2.Feld1=Table1.Feld1 OR .F.)

Warum?


Gruß,
WiWo.
 

Lesen sie die antworten

#1 Erich TODT
21/05/2008 - 01:27 | Warnen spam
Hallo Winfried!

Grundsàtzlich kann ich das von dir geschilderte Verhalten nachvollziehen.
Ich bin vielleicht schon etwas müde vom heutigen Stammtisch in Wien, aber
irgendwie ist mir eines nicht ganz klar:

Ist es Absicht, dass du in der WHERE Klausel deiner Unterabfrage Table1
referenzierst, ohne sie in der FROM Klausel angeführt zu haben?

So klappt es jedenfalls sowohl mit "OR .F." als auch mit "AND .T.":

SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table1,Table2 WHERE Table2.Feld1=Table1.Feld1 OR .F.)

Aber wàre es da nicht einfacher, gleich folgendes Statement abzusetzen:
SELECT Table1.* FROM Table1,Table2 WHERE Table2.Feld1=Table1.Feld1

Oder wenn du wirklich das machen willst, was du uns geschrieben hast,
müsstest du wohl den Umweg über eine Variable gehen, in der du dir den Wert
des aktuellen Datensatzes von Feld1 in Table1 merkst:

lnTemp = Table1.feld1
SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table2 WHERE Table2.Feld1=lnTemp OR .F.)

Mich wundert aber weniger der Fehler 1801 beim "OR .F.", sondern eher, dass
er beim "AND .T." nicht kommt...


Ich hoffe, das hilft dir weiter!

Herzliche Grüße
Erich


Erich TODT
dFPUG Regionalleiter Wien
URL: http://wien.dfpug.de/


"Winfried Wolf" schrieb im Newsbeitrag
news:
Hallo,

Die Vorbereitung (VFP9SP2):
CREATE TABLE Table1 (feld1 I)
CREATE TABLE Table2 (feld1 I)


Ein SQL-Select dieser Form funktioniert:

SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table2 WHERE Table2.Feld1=Table1.Feld1 AND .T.)

Ein SQL-Select dieser Form liefert Fehler 1801:

SELECT * FROM Table1 WHERE EXIST ;
(SELECT * FROM Table2 WHERE Table2.Feld1=Table1.Feld1 OR .F.)

Warum?


Gruß,
WiWo.

Ähnliche fragen