Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UNION-Problem (https://www.delphipraxis.net/143950-union-problem.html)

NetSonic 26. Nov 2009 17:01

Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: ZeosLib

UNION-Problem
 
Ich habe ein Problem mit folgender SQL-Abfrage und finde einfach keinen Lösungsansatz: :(

SQL-Code:
SELECT
  tblorder."ID",
  tblorder."BestDatum",
  tblorder."Lieferant",
  tblpos."ArtikelNummer",
  tblpos."ArtikelName",
  tblpos."EK",
  tblpos."VK",
  tblpos."Anzahl",

  2 as flag

FROM
  public.tblorder,
  public.tblpos
WHERE
  tblorder."ID" = tblpos."ID"

UNION ALL

SELECT DISTINCT
  tblorder."ID",
  tblorder."BestDatum",
  tblorder."Lieferant",
  tblpos."ArtikelNummer",
  tblpos."ArtikelName",
  tblpos."EK",
  tblpos."VK",
  tblpos."Anzahl",

  1 as flag

FROM
  public.tblorder,
  public.tblpos
WHERE
  tblorder."ID" = tblpos."ID"

ORDER BY tblorder."Lieferant", flag
Ich erhalte folgende Fehlermeldung: "fehlender Eintrag in FROM-Klausel für Tabelle "tblorder"!
Was könnte hier falsch sein? Bin für jede Idee dankbar!

DeddyH 26. Nov 2009 17:23

Re: UNION-Problem
 
Ich werd aus dem Statement nicht ganz schlau, was möchtest Du denn erreichen?

NetSonic 26. Nov 2009 18:11

Re: UNION-Problem
 
Ich benötige "doppelte Datensätze", da ich mit Hilfe der SMDBGrid Datensätze gruppieren will: (siehe dazu hier)

Und das kann ich ja nur durch die Verwendung von UNION erreichen. Und die "flags" benötige ich, um zu unterscheiden, ob es sich um einen "Datensatz" oder eine "Gruppierung" handelt. Jedenfalls ist das mein aktueller Stand.

DeddyH 26. Nov 2009 18:16

Re: UNION-Problem
 
Wie stellt sich das mit einem INNER JOIN dar (in anderer Notation)?
SQL-Code:
SELECT
  tb."ID",
  tb."BestDatum",
  tb."Lieferant",
  tp."ArtikelNummer",
  tp."ArtikelName",
  tp."EK",
  tp."VK",
  tp."Anzahl",

  2 as flag

FROM
  public.tblorder tb
JOIN
  public.tblpos tp
ON
  tb."ID" = tp."ID"

UNION ALL

SELECT DISTINCT
  tb."ID",
  tb."BestDatum",
  tb."Lieferant",
  tp."ArtikelNummer",
  tp."ArtikelName",
  tp."EK",
  tp."VK",
  tp."Anzahl",

  1 as flag

FROM
  public.tblorder tb
JOIN
  public.tblpos tp
ON
  tb."ID" = tp."ID"

ORDER BY tb."Lieferant", flag
[edit] Sicherheitshalber Tabellenaliase eingefügt [/edit]

NetSonic 26. Nov 2009 18:46

Re: UNION-Problem
 
Das habe ich in Deiner Variante noch nicht probiert. Aber ich werde es morgen früh gleich einmal versuchen und mich dann wieder dazu äußern. Vielleicht mit einem positiven Ergebnis!? :-D

Danke erstmal für Deine Mühe...

Gruß
NetSonic


EDIT:
Aaaaalsoooo:
Mit dieser Variante bekomme ich folgende Meldung: "fehlender Eintrag in FROM-Klausel für Tabelle tb";
Im Prinzip also der gleiche Fehler wie vorher. Aber verstehen kann ich diese Meldung absolut nicht!
Wer kann mir da nochmal bitte Hilfestellung geben?

Mike_on_Tour 27. Nov 2009 08:39

Re: UNION-Problem
 
Hallo NetSonic,

auch wenn es nicht wirklich hilft, setze doch mal im zweiten SELECT alle Werte auf Null, außer den Lieferant.
SQL-Code:
SELECT
  tblorder."ID",
  tblorder."BestDatum",
  tblorder."Lieferant",
  tblpos."ArtikelNummer",
  tblpos."ArtikelName",
  tblpos."EK",
  tblpos."VK",
  tblpos."Anzahl",

  2 as flag

FROM
  public.tblorder,
  public.tblpos
WHERE
  tblorder."ID" = tblpos."ID"

UNION ALL

SELECT DISTINCT
  0 as ID,
  0 as BestDatum,
  tblorder."Lieferant",
  0 as ArtikelNummer,
  0 as ArtikelName,
  0 as EK,
  0 as VK,
  0 as Anzahl,

  1 as flag

FROM
  public.tblorder,
  public.tblpos
WHERE
  tblorder."ID" = tblpos."ID"

ORDER BY tblorder."Lieferant", flag
Bei mir (ADS-Datenbank) funktioniert das.

Mike

NetSonic 27. Nov 2009 11:22

Re: UNION-Problem
 
Nein, das funktioniert ebenfalls nicht. Ich bekomme weiterhin diese Fehlermeldung. Ich werde wohl damit anfangen müssen, mir diese Gruppierung mit einer anderen Komponente per Hand "zusammenzubauen".

EDIT:
Vielleicht hatte ich doch gerade noch einen "Geistesblitz"... Ich muss da noch einmal etwas ausprobieren!

Jupp, mit diesem Code bekomme ich den Fehler nicht mehr:

SQL-Code:
SELECT DISTINCT
tblorder."ID",
tblorder."OrderDate",
tblorder."Lieferant",
'a' AS "ArtikelNummer",
'a' AS "ArtikelName",
'a' AS "EK",
'a' AS "VK",
1 as "flag"

FROM tblorder, tblpos

WHERE tblpos."OrderID" = tblorder."OrderID"

UNION ALL

SELECT DISTINCT
tblorder."OrderID",
tblpos."OrderDate",
'a' AS "Lieferant",
tblpos."ArtikelNummer",
tblpos."ArtikelName",
tblpos."EK",
tblpos."VK",
2 as "flag"

FROM tblorder, tblpos

WHERE tblpos."OrderID" = tblorder."OrderID"

ORDER BY "OrderID", "flag"
Schon komisch - viel anders ist dieser SQL-Schnipsel ja auch nicht... :?
Naja, es funktioniert soweit und das war ja das Ziel.
Danke für Eure Hilfestellungen.

Gruß
NetSonic

Mike_on_Tour 27. Nov 2009 12:52

Re: UNION-Problem
 
Hallo NetSonic,

bist Du Dir sicher das es im ersten SELECT
SQL-Code:
tblorder."OrderDate"
und im zweiten SELECT
SQL-Code:
tblorder_pos."OrderDate"
heißen muß ?

Mike

NetSonic 27. Nov 2009 13:16

Re: UNION-Problem
 
@Mike: Du hast recht, es war ein "Copy-and-Paste"-Fehler von mir. Habs nochmal editiert und korrigiert.

mkinzler 27. Nov 2009 13:22

Re: UNION-Problem
 
Durch die Verwendung von Tabellenaliasen könnte man die Abfrage auch lesbarer gestalten


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz