AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi verschachteltes SQL-Statement
Thema durchsuchen
Ansicht
Themen-Optionen

verschachteltes SQL-Statement

Ein Thema von Hansa · begonnen am 31. Okt 2005 · letzter Beitrag vom 1. Nov 2005
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

verschachteltes SQL-Statement

  Alt 31. Okt 2005, 21:10
Datenbank: IB/FB • Zugriff über: egal
Hi,

vielleicht ist der Titel auch falsch gewählt. Es geht um folgendes : Ich habe eine Artikel-Table. Zu jedem Artikel gibt es in anderer Tabelle 1-3 Einträge. Pro Zeile will ich nun den Artikel anzeigen und die 1-3 Einträge aus der anderen. Ich denke es müßte so gehen : SELECT Bla1, BLA2 from TABLE1 T1 WHERE (SELECT NR FROM TABLE2 WHERE NR = :NR); Leider haben Versuche in dieser Richtung nicht genützt. Wie geht das jetzt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: verschachteltes SQL-Statement

  Alt 31. Okt 2005, 21:15
Hi Hansa,

ich fürchte du musst entweder Abstand von deiner Idee oder deinem RDBMS nehmen - eine entsprechende Aggregat-Funktion zur Denormalisierung kenne ich von MySQL, aber nicht von IB/FB.

Grüße vom marabu
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: verschachteltes SQL-Statement

  Alt 31. Okt 2005, 21:17
@Hansa
Ich hoffe für dich und dein Ego, dass mir hier mein User gelöscht wurde, bevor ich das nächste mal von deiner schier endloses Kompetenz lesen muss...
Das ist doch nun wirklich SQL 1x1
SQL-Code:
SELECT Bla1
      ,Bla2
FROM Table1
WHERE Nr in (SELECT Nr
             FROM Table2)
btw: Weder FB noch IB sind in der Lage solche Statements effizient vorzubereiten. Mit einem inner join kommst du möglicherweise schneller ans Ziel.

edit: Ich als Ora-Hase und die AnsiSQL Join Syntax...
inner join hätte es heißen sollen
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: verschachteltes SQL-Statement

  Alt 31. Okt 2005, 21:23
Ich kenne zwar IB nicht, aber teste doch mal folgende Formulierung ...

SQL-Code:
SELECT Bla1, BLA2 from TABLE1 T1
INNER JOIN
  (SELECT NR FROM TABLE2 WHERE NR = :NR) T2
  ON T2.Nr = T1.N1
Übrigens ...
fehlt da nicht was ?
SELECT Bla1, BLA2 from TABLE1 T1 WHERE (SELECT NR FROM TABLE2 WHERE NR = :NR);
SQL-Code:
SELECT Bla1, BLA2 from TABLE1 T1 WHERE T1.Nr IN (SELECT NR FROM TABLE2 WHERE NR = :NR);
SELECT Bla1, BLA2 from TABLE1 T1 WHERE T1.Nr = (SELECT NR FROM TABLE2 WHERE NR = :NR);


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: verschachteltes SQL-Statement

  Alt 31. Okt 2005, 21:27
Ich glaube es ist besser ich gehe jetzt in mein Bett. Ich habe doch glatt geglaubt, Hansa sucht eine dem GROUP_CONCAT von MySQL ebenbürtige Lösung.

Gute Nacht vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: verschachteltes SQL-Statement

  Alt 1. Nov 2005, 10:17
Moin zusammen,

Der inner Join ist für die ein bis drei Zeilen Lösung geklärt, je nach ein bis drei vorkommenden Einträge. Das Problem ist nur das nun in "eine Zeile" zu bekommen. Also ich kenne da keinen SQL-Befehl von IB/FB, der das bewirkt. Mein Weg wäre eine SP zu schreiben die den Inner-Join anwendet und dann die zusätzlichen Spalten oder Concatspalte (was willst Du Hansa) über Variablen generiert (Aber möglicherweise gibt es da ja inzwischen neue- oder uralt-SQL-Standarts,die nich kenne...) .

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#7

Re: verschachteltes SQL-Statement

  Alt 1. Nov 2005, 13:59
Wie sehen denn Deine beiden Tabellen aus ? Ich denke mal Du meinst folgendes:

select t1.nr,t1.bla1,t1.bla2,t2.bla3 from table1 t1,table2 t2 where t2.nr = t1.nr Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: verschachteltes SQL-Statement

  Alt 1. Nov 2005, 14:47
SQL-Code:
CREATE TABLE TABLE1 (
    ID INTEGER NOT NULL,
    NAME CHAR(10)
);

CREATE TABLE TABLE2 (
    ID INTEGER NOT NULL,
    ID_TABLE1 INTEGER,
    TEST INTEGER
);

INSERT INTO TABLE1 (ID, NAME) VALUES (1, '1 ');

COMMIT WORK;

INSERT INTO TABLE2 (ID, ID_TABLE1, TEST) VALUES (1, 1, 1);
INSERT INTO TABLE2 (ID, ID_TABLE1, TEST) VALUES (2, 1, 2);
INSERT INTO TABLE2 (ID, ID_TABLE1, TEST) VALUES (3, 1, 3);

COMMIT WORK;



/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY (ID);
ALTER TABLE TABLE2 ADD CONSTRAINT PK_TABLE2 PRIMARY KEY (ID);
In Table 2 habe ich drei Werte. In Table 1 nur einen. Zu diesem einen sollen die drei anderen in einer Zeile angezeigt werden ! In Table 2 gibt es 0-3 verschiedene Werte, die sich auf Table 1 beziehen. Gelänge es diese Daten in einer Zeile, also in einer Datenmenge pro Record aus Table1 unterzubringen, dann würde sich ein Programmteil stark vereinfachen lassen. Mit Next könnte ich im Programm dann leichter durch die Daten wandern, weil eben nicht sicher ist, ob die möglichen Werte bis 3 überhaupt da sind.
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: verschachteltes SQL-Statement

  Alt 1. Nov 2005, 18:41
Hallo Hansa,

ganz im Ernst, eine Zeilen-Spalten-Transposition mit ANSI SQL lässt sich unter deinen Randbedingungen - minmax Komplexität (0, 3) - wahrscheinlich mit einer Select Procedure über zwei Cursor implementieren, aber wo soll da netto noch eine Vereinfachung raus schauen? Ist ein Left Outer Join wirklich so schlimm? Wenn du dunkle Wege gehen willst, dann kannst du auch gleich den Array Datentyp in Table1 verwenden und auf Table2 ganz verzichten.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:55 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