Ergebnis 1 bis 10 von 10

Thema: Wiederholte Abfrage mit verschiedenen Parametern

  1. #1
    lu1
    lu1 ist offline Neuer Benutzer
    Registriert seit
    09.06.2010
    Beiträge
    12

    Standard Wiederholte Abfrage mit verschiedenen Parametern

    Hallo zusammen,

    ich m�chte folgende Arbeitsschritte m�glichst automatisiert laufen lassen und wenn m�glich in einem Schritt zusammenfassen:

    Schritt 1:

    CREATE TABLE tabelle_1 AS
    SELECT *
    FROM vertices_tmp
    JOIN
    (SELECT * FROM driving_distance('
    SELECT ogc_fid AS id,
    source::int4 AS source,
    target::int4 AS target,
    traveltime::float8 AS cost
    FROM strassenl_dachraum_erweitert_ohne_autobahn',
    25080,
    60,
    false,
    false)) AS route
    ON
    vertices_tmp.id = route.vertex_id

    Schritt 1 muss circa 500 Mal mit anderen Werten durchgef�hrt werden, wobei sich der Tabellenname aus tabelle_+ aufsteigendem Zahlenwert zusammensetzen soll. Au�erdem muss die in der Abfrage rot makierte ID-Zahl aus einer anderen Tabelle (vertices_tmp) geholt werden.
    Wie muss der Code aussehen, damit die Tabellennamen und die Zahlen nacheinander in die Abfrage eingebaut werden?


    Schritt 2:
    CREATE TABLE catchment_union AS
    SELECT id,the_geom,cost FROM tabelle_1
    UNION ALL
    SELECT id,the_geom,cost FROM tabelle_2
    UNION ALL
    SELECT id,the_geom,cost FROM tabelle_3
    ...
    ...

    In Schritt 2 werden die in Schritt 1 erstellten Tabellen mit UNION zusammengef�hrt.
    Wie k�nnen die Tabellennamen automatisiert eingef�gt werden?

    Ich habe nur wenig Wissen zu SQL und bin f�r jede Hilfe dankbar.

    Viele Gr��e
    Ludger

  2. #2
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Warum willst Du 500 identische Tabellen anlegen? Das macht doch gar keinen Sinn?
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  3. #3
    lu1
    lu1 ist offline Neuer Benutzer
    Registriert seit
    09.06.2010
    Beiträge
    12

    Standard

    Die Tabellen sind ja nicht identisch. Durch die geaenderte ID-Zahl wird ueber driving_distance jeweils eine Tabelle mit unterschiedlichen Werten angelegt. Driving_distance ist eine Funktion von pgrouting mit der die Fahrtzeit zu einem Punkt in einem Netzwerk ermittelt werden kann. Und je nach Lage des Punktes, ergeben sich andere Fahrtzeiten.

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von lu1 Beitrag anzeigen
    Hallo zusammen,

    ich m�chte folgende Arbeitsschritte m�glichst automatisiert laufen lassen und wenn m�glich in einem Schritt zusammenfassen:

    Schritt 1:

    CREATE TABLE tabelle_1 AS
    SELECT *
    FROM vertices_tmp
    JOIN
    (SELECT * FROM driving_distance('
    SELECT ogc_fid AS id,
    source::int4 AS source,
    target::int4 AS target,
    traveltime::float8 AS cost
    FROM strassenl_dachraum_erweitert_ohne_autobahn',
    25080,
    60,
    false,
    false)) AS route
    ON
    vertices_tmp.id = route.vertex_id

    Schritt 1 muss circa 500 Mal mit anderen Werten durchgef�hrt werden, wobei sich der Tabellenname aus tabelle_+ aufsteigendem Zahlenwert zusammensetzen soll. Au�erdem muss die in der Abfrage rot makierte ID-Zahl aus einer anderen Tabelle (vertices_tmp) geholt werden.
    Wie muss der Code aussehen, damit die Tabellennamen und die Zahlen nacheinander in die Abfrage eingebaut werden?


    Schritt 2:
    CREATE TABLE catchment_union AS
    SELECT id,the_geom,cost FROM tabelle_1
    UNION ALL
    SELECT id,the_geom,cost FROM tabelle_2
    UNION ALL
    SELECT id,the_geom,cost FROM tabelle_3
    ...
    ...

    In Schritt 2 werden die in Schritt 1 erstellten Tabellen mit UNION zusammengef�hrt.
    Wie k�nnen die Tabellennamen automatisiert eingef�gt werden?

    Ich habe nur wenig Wissen zu SQL und bin f�r jede Hilfe dankbar.

    Viele Gr��e
    Ludger
    Diese Tabellen, die Du da erstellen willst, würden dann aber nur statisch sein.

    Also, machen könntest Du sowas über eine Funktion in plpgsql (als beispiel) und dynamischem SQL. Die Doku enthält Beispiele für sowas.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zitat Zitat von lu1 Beitrag anzeigen
    Die Tabellen sind ja nicht identisch.
    Solange die Funktion driving_distance() nicht für jede ID eine andere Liste von Spalten zurückliefert (was ich mir nicht vorstellen kann), werden die Tabellen von der Struktur identisch sein.

    Und bitte formatiere SQL mit [code] Tags damit das besser lesbar ist.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  6. #6
    lu1
    lu1 ist offline Neuer Benutzer
    Registriert seit
    09.06.2010
    Beiträge
    12

    Standard

    Hallo castorp,

    Danke für Deine Anmerkungen. Ich packe jetzt alles in eine Tabelle. Bleibt mir nur noch das Problem, wie ich die ID-Zahlen aus einer anderen Tabelle in die Abfrage bekomme. Die Abfrage muss ja jeweils mit einer anderen ID-Zahl berechnet werden, solange bis alle ID-Zahlen durchgelaufen sind.

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Du könntest das als Stored Precedure auslegen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  8. #8
    lu1
    lu1 ist offline Neuer Benutzer
    Registriert seit
    09.06.2010
    Beiträge
    12

    Standard

    Kannst Du das näher erläutern, da ich mit Stored Procedures noch nie gearbeitet habe.

  9. #9
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von lu1 Beitrag anzeigen
    Kannst Du das näher erläutern, da ich mit Stored Procedures noch nie gearbeitet habe.
    Das ist recht gut hier erläutert: PostgreSQL: Documentation: Manuals: PostgreSQL 9.0: PL/pgSQL - SQL Procedural Language


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  10. #10
    lu1
    lu1 ist offline Neuer Benutzer
    Registriert seit
    09.06.2010
    Beiträge
    12

    Standard

    Ich habe jetzt versucht die ID-Zahlen aus der Tabelle mittels eines Cursors in meine Abfrage zu übertragen. Meine Cursor-Funktion gibt mir aber immer nur den ersten Wert zurück. Ich habe gedacht, dass der Cursor alle Zahlen übermittelt und diese dann nacheinander in meine Abfrage einfügt und meine Abfrage mit der jeweils neuen Zahl durchgeführt wird. Ist meine Herangehensweise mit Cursorn und eventuell Loops zu arbeiten richtig oder habe ich den falschen Weg eingeschlagen? Ist es überhaupt möglich einer SELECT-Anweisung automatisiert Werte zu übermitteln, mit denen dann jeweils Abfragen durchgeführt werden, deren Ergebnisse in eine gemeinsame Tabelle geschrieben werden?
    Meine Cursor-Funktion:

    CREATE OR REPLACE FUNCTION user_x (integer)
    RETURNS integer
    LANGUAGE plpgsql
    AS $function$

    DECLARE

    x_cursor refcursor;
    ergebnis integer;

    BEGIN
    RAISE INFO 'Cursor ungebunden';
    OPEN x_cursor FOR SELECT nearest_node FROM autobahn_anschluesse ORDER BY nearest_node;
    FETCH x_cursor INTO ergebnis;
    RETURN ergebnis;
    CLOSE x_cursor ;

    END
    $function$

Ähnliche Themen

  1. Problem Update von Tabellen in verschiedenen Schemas
    Von Hammerfall im Forum SQL
    Antworten: 12
    Letzter Beitrag: 07.07.2011, 15:42
  2. Frage Variable Liste an Parametern für WHERE-Klausel?
    Von samo80 im Forum SQL
    Antworten: 5
    Letzter Beitrag: 17.03.2011, 09:51
  3. Antworten: 8
    Letzter Beitrag: 26.06.2009, 12:26
  4. Antworten: 9
    Letzter Beitrag: 11.12.2008, 08:50
  5. Antworten: 12
    Letzter Beitrag: 23.11.2007, 16:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum