AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

rekursives select

Ein Thema von Berni68 · begonnen am 13. Mär 2011 · letzter Beitrag vom 13. Mär 2011
Antwort Antwort
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

rekursives select

  Alt 13. Mär 2011, 16:48
Datenbank: firebird • Version: 2.1 • Zugriff über: IBDAC
Hallo zusammen,

ich habe ein Problem bei folgender select Anweisung:
Code:
with recursive x (id, ref, Anz, Artikel) as
(
select
  s.modell, s.referenz, s.anz, m.partnumber
  from stueckliste s
  join modelle m on m.id = s.referenz
  where s.modell = :id
union all
select
  s.modell, s.referenz, s.anz, m.partnumber
  from stueckliste s
  join modelle m on m.id = s.referenz
  inner join x on s.modell = x.ref
)
select * from x
die prinzipiell die gewünschten Datensätze liefert z.B.:
Code:
ID   REF   ANZ   ARTIKEL
646   680   4   ohne
646   682   2   500738
646   681   4   ohne
646   683   1   500740
646   684   1   500741
646   685   1   500742
646   687   1   500744   <-diese Zeile unterdrücken
687   686   3   500743   x
687   645   1   500690   x
687   688   1   500747   x
687   689   1   500748   x
687   736   2   500793   x
646   690   1   500746
646   696   4   500756
646   727   2   500761
646   728   2   500762
Jedoch sollte die gekennzeichnete Zeile nicht enthalten sein,
da sie durch die folgenden mit x gekennzeichneten Zeilen vertreten ist (Stücklisten/Teilelisten-Thema)
Als Kriterium könnte man sagen:
Zeile nicht ausgeben wenn Wert der Spalte REF in Spalte ID vorhanden ist.
Aber ich krieg das einfach nicht in das SQL-Statement.
Bernhard
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: rekursives select

  Alt 13. Mär 2011, 17:08
SQL-Code:
with recursive x (id, ref, Anz, Artikel) as
(
select
  s.modell, s.referenz, s.anz, m.partnumber
  from stueckliste s
  join modelle m on m.id = s.referenz
  where s.modell = :id
union all
select
  s.modell, s.referenz, s.anz, m.partnumber
  from stueckliste s
  join modelle m on m.id = s.referenz
  inner join x on s.modell = x.ref
)
SELECT *
FROM x x1
WHERE NOT EXISTS (SELECT *
                  FROM x
                  WHERE id = x1.ref)
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#3

AW: rekursives select

  Alt 13. Mär 2011, 17:20
vielen Dank, klappt wunderbar!

Verstehe allerdings nicht warum. Was ist das für ein x1 ?
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

AW: rekursives select

  Alt 13. Mär 2011, 17:46
Das x1 hat er, als ordentlicher Programmierer, pro forma hingeschrieben.
Technisch ist es nicht nötig. Man macht das einfach so.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: rekursives select

  Alt 13. Mär 2011, 17:59
Technisch ist es nicht nötig.
Das ist sehr wohl nötig! Es ist der Name für die "äußere" Tabelle (x), sonst wäre keine Unterscheidung zwischen "äußerem" X und "innerem" X möglich.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

AW: rekursives select

  Alt 13. Mär 2011, 18:03
Oh verflixt ... mein Fehler.
Und die Moral von der Geschicht: Man kann schneller tippen als denken.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.
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