Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Select - Zu viele Ergebnisse

  1. #1
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard Select - Zu viele Ergebnisse

    Kurz:
    Kabel werden durch Trassensegmente dargestellt.
    Ein Kabel hat außerdem einen Startknoten und einen Endknoten.

    Als Ergebnis erscheinen 145 Verbindungen, ich habe aber nur 23 Kabel.

    Hier die Abfrage und das ER-Modell dazu. Falls jemand die Zeit zum anschauen hat, vielen Dank.

    Karl

    er.jpg

    Code:
    SELECT 
      "N".netzverbindung_id,
      "K".id_kabel,
      st_astext(ST_LineMerge(ST_Collect(public.trassensegment.the_geom))) AS the_geom,
      public.netzknoten.id_netzknoten,
      sum(case when "N".start = 1 then "N".netzknoten_id else 0 end) AS startknoten,
      sum(case when "N".start = 0 then "N".netzknoten_id else 0 end) AS endknoten
    FROM
      public.kabel "K"
      LEFT OUTER JOIN public.trassensegment_kabel ON (public.trassensegment_kabel.kabel_id = "K".id_kabel)
      INNER JOIN public.trassensegment ON (public.trassensegment.id_segment = public.trassensegment_kabel.segment_id)
      LEFT OUTER JOIN public.netzverbindung ON ("K".netzverbindung_id = public.netzverbindung.id_netzverbindungen)
      INNER JOIN public.netzverbindung_netzknoten ON (public.netzverbindung.id_netzverbindungen = public.netzverbindung_netzknoten.netzverbindung_id)
      INNER JOIN public.netzknoten ON (public.netzverbindung_netzknoten.netzknoten_id = public.netzknoten.id_netzknoten)
      INNER JOIN netzverbindung_netzknoten "N" ON (public.netzverbindung.id_netzverbindungen = "N".netzverbindung_id)
    WHERE
      public.netzverbindung_netzknoten.start = 1
    GROUP BY
      "N".netzverbindung_id,
      "K".id_kabel,
      the_geom,
      public.netzknoten.id_netzknoten
    Über die Tabelle "N" wird der Startknoten und Endknoten über die sum-Selects gebildet.

  2. #2
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Hier noch einen Teil der Erg-Tabelle, wenn's weiterhilft.

    erg.jpg


    Wie gesagt, ich habe eigentlich nur 23 Netzverbindungen.
    Angehängte Grafiken Angehängte Grafiken
    Geändert von karl_ha (19.02.2010 um 09:46 Uhr)

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von karl_ha Beitrag anzeigen
    Hier noch einen Teil der Erg-Tabelle, wenn's weiterhilft.

    erg.jpg
    Wie gesagt, ich habe eigentlich nur 23 Netzverbindungen.
    Helfen würde vielleicht eher eine Datei mit den Tabellendefinitionen und Testdaten. Wie ich aber grad sehe, ist das PostGIS, oder? Da könnte vielleicht gisman helfen...

    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

  4. #4
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    stimmt. Hier ein SQL-File mit dem Tabellendump (als zip-file)

    Postgis-Teil: Es werden die Trassensegmente zu einer langen Line verbunden.


    Eigentlich möchte ich nur zwei Abfragen verbinden:

    Abfrage der Kabel:
    Code:
    SELECT 
      public.kabel.id_kabel,
      st_astext(ST_LineMerge(ST_Collect(public.trassensegment.the_geom))) AS the_geom
    FROM
      public.kabel 
      LEFT OUTER JOIN public.trassensegment_kabel ON (public.trassensegment_kabel.kabel_id = public.kabel.id_kabel)
      INNER JOIN public.trassensegment ON (public.trassensegment.id_segment = public.trassensegment_kabel.segment_id)
    GROUP BY
      public.kabel.id_kabel
    Abfrage der Start- und Endknoten:
    Code:
    SELECT 
      "N".netzverbindung_id,
      sum(case when "N".start = 1 then "N".netzknoten_id else 0 end) AS startknoten,
      sum(case when "N".start = 0 then "N".netzknoten_id else 0 end) AS endknoten
    FROM
      netzverbindung_netzknoten "N"
    GROUP BY
      "N".netzverbindung_id
    Angehängte Dateien Angehängte Dateien
    Geändert von karl_ha (19.02.2010 um 10:13 Uhr)

  5. #5
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Moin!
    PostGIS hab ich erst gar nicht gesehen . Du gruppierst hier über die Geometrien, und die sind bei den Doppelten alle unterschiedlich, insofern leifert es auch jeweils einen Treffer. Eventuell wäre eine Lösung erst die Gruppierung der Sachdaten vorzunehmen und auf dieser Basis eine Geometrie zu erzeugen. Oder du stellst sicher, das halt immer die gleiche Geometrie erzeugt wird, z.B. durch Sortierung der Einzelgeometrien o.ä.

    Gruß Uwe
    Have a lot of fun!

  6. #6
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Ich möcht ja nicht nerven...

    Ich habe das ER ausgedünnt.
    er.jpg

    Code:
    SELECT 
      st_astext("ST_LineMerge"("ST_Collect"(public.trassensegment.the_geom))) AS the_geom,
      sum(case when public.netzverbindung_netzknoten.start = 1 then public.netzverbindung_netzknoten.netzknoten_id else 0 end) AS startknoten,
      sum(case when public.netzverbindung_netzknoten.start = 0 then public.netzverbindung_netzknoten.netzknoten_id else 0 end) AS endknoten,
      public.netzverbindung_netzknoten.netzverbindung_id,
      public.kabel.id_kabel
    FROM
      public.kabel
      LEFT OUTER JOIN public.trassensegment_kabel ON (public.trassensegment_kabel.kabel_id = public.kabel.id_kabel)
      INNER JOIN public.trassensegment ON (public.trassensegment.id_segment = public.trassensegment_kabel.segment_id)
      LEFT OUTER JOIN public.netzverbindung_netzknoten ON (public.kabel.netzverbindung_id = public.netzverbindung_netzknoten.netzverbindung_id)
    GROUP BY
      the_geom,
      public.netzverbindung_netzknoten.netzverbindung_id,
      public.kabel.id_kabel
    Das Erg. ist jedoch das gleiche, 145 Einträge

    erg.jpg
    Geändert von karl_ha (19.02.2010 um 11:13 Uhr)

  7. #7
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Solange du über die Geometrien gruppierst und da für jede was anderes steht wird sich das auch nicht ändern . Du siehst die Unterschiede in deiner Ergebnistabelle.

    Gruß Uwe
    Have a lot of fun!

  8. #8
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Aha, ok.

    Ein Kabel besteht z.B. aus zwei Trassensegmenten:
    Code:
    id_kabel    st_astext
    1    LINESTRING(3586853.7135 5416708.7432,3587247.7808 5416407.5717)
    1    LINESTRING(3586739.638 5416516.5396,3586853.7135 5416708.7432)
    Wenn ich es mit
    Code:
      st_astext(ST_LineMerge(ST_Collect(public.trassensegment.the_geom))) AS the_geom
    merge

    habe ich aus den zwei Segmenten eine Linie erstellt:
    Code:
    id_kabel    the_geom
    1    LINESTRING(3586739.638 5416516.5396,3586853.7135 5416708.7432,3587247.7808 5416407.5717)
    Als Erg. habe ich die 23 Kabel die es gibt.

    Ich muss die Segmente doch zusammenmergen?

  9. #9
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Habe jetzt aus den zwei oberen Abfragen je eine View gemacht. Bei einer Abfrage darauf und einem Join über die netzverbindung_id stimmt es. (23 Kabel)

    Das dies aber nicht in über gemeinsammen Abfrage geht soll kann ja nicht sein...

  10. #10
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Das mag schon richtig sein, aber wenn du dir die Text-Geometrien anschaust( z.B. die Startkoordinaten vom Kabel 2), sind die unterschiedlich, d.h. beim Gruppieren darüber ergibt jede Kombination einen Treffer. Woher das kommt, musst du in deinen Ausgangsgeometrien herausfinden. Abhilfe wäre vielleicht, wie oben schon gesagt, Sortieren der zusammenzufügenden Geometrien nach z.B. Startknotennummer, weil du afaik keine Gewährleistung hast, in welcher Reihenfolge die DB die Einzelgeometrien für das Collect liefert. Oder du machst das Geometriehandling z.B. als Subselect.

    Gruß Uwe
    Have a lot of fun!

Seite 1 von 2 12 LetzteLetzte

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