Announcement

Collapse
No announcement yet.

Abfragewerte mehrerer Datensätze zu einem verbinden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfragewerte mehrerer Datensätze zu einem verbinden

    Hallo Liebe SQL Freunde,

    ich habe gerade schonmal durch dieses Forum gestöbert, aber noch keine Hilfe für mein Problem gefunden. Darum eröffne ich mal ein neues Thema.

    Ich habe folgendes Problem:
    Es liegen 2 Tabellen vor
    Tabelle A: enthält Artikelnummern (einmalig) und 10 weitere Spalten mit Bildnamen (Bildnamen können in weiteren Datensätzen mehrmals vorkommen, jedoch nicht im selben Datensatz mehrmals)
    Tabelle B: enthält Artikelnummern (einmalig) und eine Spalte mit Indexeinträgen, die durch ein Semikolon getrennt sind (diese können mehrmals vorkommen)

    Mein Problem, ich möchte die Tabellen so abfragen, dass mein Ergebnis wie folgt aussieht:
    Spalte A: ein Bildname, dieser darf nurnoch einmal vorhanden seien
    Spalte B: alle Artikelnummern und Indexeinträge durch Semikolon getrennt, bei denen dieses Bild vorkommt.

    Ich habe keinen Weg gefunden, mit dem ich das lösen kann und auch in diesem Forum noch keinen Fall gefunden, der mir helfen könnte.

    Vielen Dank schonmal für eure Aufmerksamkeit und eure Hilfe.

    MFG Christoph Baral
    0
    Grundkenntnisse
    0%
    0
    Wenig
    0%
    0
    Fortgeschritten
    0%
    0
    Experte
    0%
    0

    The poll is expired.


  • #2
    Wofür ist TabelleB genau gut? Wenn die Indexe dort auf die Spalten in TabelleA mappen wie tun sie das? (Spalten haben keine natürliche Reihenfolge!)

    Warum ist das so gelöst? Sieht mir wieder nach einer nicht relationalen Methode aus irgendwas darzustellen die in eine relationale Datenbank gequetscht worden. Da ist dann die Umfrage nach Kenntnisstand nicht hilfreich da das Problem vermutlich eher schon im Design liegt als an dem wie bekomme ich nachher mit SQL das heraus was ich herausbekommen möchte.

    Comment


    • #3
      Wozu könnte die Umfrage dienen um das Problem zu lösen?

      Wie definierst du "Grundkenntnisse" und "Wenig"?
      Christian

      Comment


      • #4
        Originally posted by BassBaral View Post
        Hallo Liebe SQL Freunde,

        ich habe gerade schonmal durch dieses Forum gestöbert, aber noch keine Hilfe für mein Problem gefunden. Darum eröffne ich mal ein neues Thema.

        Ich habe folgendes Problem:
        Es liegen 2 Tabellen vor
        Tabelle A: enthält Artikelnummern (einmalig) und 10 weitere Spalten mit Bildnamen (Bildnamen können in weiteren Datensätzen mehrmals vorkommen, jedoch nicht im selben Datensatz mehrmals)
        Tabelle B: enthält Artikelnummern (einmalig) und eine Spalte mit Indexeinträgen, die durch ein Semikolon getrennt sind (diese können mehrmals vorkommen)

        Mein Problem, ich möchte die Tabellen so abfragen, dass mein Ergebnis wie folgt aussieht:
        Spalte A: ein Bildname, dieser darf nurnoch einmal vorhanden seien
        Spalte B: alle Artikelnummern und Indexeinträge durch Semikolon getrennt, bei denen dieses Bild vorkommt.

        Ich habe keinen Weg gefunden, mit dem ich das lösen kann und auch in diesem Forum noch keinen Fall gefunden, der mir helfen könnte.

        Vielen Dank schonmal für eure Aufmerksamkeit und eure Hilfe.

        MFG Christoph Baral
        Um da mal einen Anfang zu liefern:

        Du hast also eine Tabelle etwa so:

        Code:
        test=*# select * from t_a;
         id |  b1   |  b2   |  b3
        ----+-------+-------+-------
          1 | bild1 | bild2 | bild3
          2 | bild2 | bild3 | bild4
          3 | bild3 | bild4 | bild5
        (3 rows)
        Das wäre also Deine erste tabelle, aber nur 3 statt 10 Spalten, das ist aber für die Lösung egal.

        Step 1:

        Code:
        test=*# select b1, id from t_a union select b2, id from t_a union select b3, id from t_a;
          b1   | id
        -------+----
         bild2 |  1
         bild4 |  3
         bild3 |  2
         bild5 |  3
         bild3 |  3
         bild3 |  1
         bild4 |  2
         bild2 |  2
         bild1 |  1
        (9 rows)
        Du willst das aber gruppiert haben, und die id's aufgezählt. In PostgreSQL geht das z.B. so:

        Code:
        test=*# select b1, array_agg(id) from (select b1, id from t_a union select b2, id from t_a union select b3, id from t_a) foo group by b1;       
        b1   | array_agg
        -------+-----------
         bild1 | {1}
         bild2 | {1,2}
         bild3 | {3,1,2}
         bild4 | {2,3}
         bild5 | {3}
        (5 rows)
        
        test=*# select b1, array_to_string(array_agg(id),',') from (select b1, id from t_a union select b2, id from t_a union select b3, id from t_a) foo group by b1;
          b1   | array_to_string
        -------+-----------------
         bild1 | 1
         bild2 | 1,2
         bild3 | 3,1,2
         bild4 | 2,3
         bild5 | 3
        (5 rows)
        Die erste Form liefert Dir ein Array, kann kann a bissl unhandlich sein, daher Form 2, das liefert Dir dann einen passenden String wie von Dir gewollt.

        Deine Tabelle B kannst Du ähnlich behandeln, und dann beide Resultate vereinen.


        Vielleicht hilft das ja...


        Andreas
        Zuletzt editiert von akretschmer; 06.09.2012, 16:43. Reason: typo

        Comment


        • #5
          Die Tabelle B habe ich mir aus dem System gezogen, ich könnte die Indexeinträge auch direkt in die andere Tabelle einfügen. Ich habe am Anfang versucht dass per SQL und MS Access zu lösen, und dachte mir würde die Beziehung die man zwischen der Tabelle erstellen kann helfen, aber dieser Schuss ist nach hinten losgegangen.

          Das System bietet für die Bilder allerdings leider keine andere Möglichkeit, die Daten zu exportieren.

          Die Umfrage war auch nur als halbwegs Orientierung für mich gedacht, ob ich mir das zu kompliziert vorstelle und/oder wo ich mit meinen SQL Kenntnissen so stehe.
          Vielen Dank für Ihre Antwort.

          In der zwischenzeit kamen ja noch 2 Antworten, ich werde diese Methode mal testen. Vielen Dank

          Comment


          • #6
            HI Andreas, Danke für deine Antwort,

            wenn ich die Funktionen benutzen möchte kommt immer der Fehler "undefinierte Funktion ´array_agg` in Ausdruck" . Muss ich das vorher noch definieren ? Mit Arrays habe ich noch nicht ausführlich gearbeitet.

            Vielen Dank für deine Hilfe

            Comment


            • #7
              Vielleicht hast du das überlesen?

              In PostgreSQL geht das z.B. so:
              Christian

              Comment


              • #8
                Hallo,
                "array_agg" ist keine Standard-SQL-Funktion! Das musst du ggf. für dein spezielles DBMS nachbauen, bzw. eine dort unterstützte Funktion verwenden. Bei MySQL würde sich da z.B. GROUP_CONCAT anbieten. Da du dein DBMS aber bisher noch nicht verraten hast, können wir an der Stelle nur raten.

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Originally posted by BassBaral View Post
                  HI Andreas, Danke für deine Antwort,

                  wenn ich die Funktionen benutzen möchte kommt immer der Fehler "undefinierte Funktion ´array_agg` in Ausdruck" . Muss ich das vorher noch definieren ? Mit Arrays habe ich noch nicht ausführlich gearbeitet.

                  Vielen Dank für deine Hilfe
                  Im Gegensatz zu Dir nannte ich das DB-System, was ich nutze. Wenn Du diese Meldung bekommst, dann hast Du entweder eine hirnalte Version von PostgreSQL, was das noch nicht kann, oder aber ein anderes DB-System.


                  Andreas

                  Comment


                  • #10
                    Normalerweise exportiere ich mir die Datenbänke als XLS-Format und importiere diese dann ins MS Access um Abfragen oder sonstiges zu erstellen.
                    Wenn ich DBF Dateien benutze ich auch schonmal ACR32.
                    Ich lade mir aber gerade mal ein POSTGRESQL Programm runter und werde mal schauen ob ich es damit hinbekomme "postgresql 9.1.5" heisst es http://www.enterprisedb.com/products...wnload#windows
                    Zuletzt editiert von BassBaral; 07.09.2012, 11:56.

                    Comment


                    • #11
                      Originally posted by BassBaral View Post
                      Normalerweise exportiere ich mir die Datenbänke als XLS-Format und arbeite dann mit MS Access um Abfragen oder sonstiges zu erstellen.
                      Wenn ich DBF Dateien benutze verwende ich ACR32.
                      Ich lade mir aber gerade mal ein POSTGRESQL Programm runter und werde mal schauen ob ich es damit hinbekomme "postgresql 9.1.5" heisst es http://www.enterprisedb.com/products...wnload#windows
                      Dir ist schon klar, daß das 2 komplett verschiedene Welten sind, also so Spielzeug wie Access und Datenbanken wie PostgreSQL?

                      Andreas

                      Comment


                      • #12
                        Wo liegen dann die Tabellen vor, auf die sich deine Frage bezieht?
                        Irgendwie ist dein Vorgehen wenig zielführend...habe ich den Eindruck
                        Christian

                        Comment


                        • #13
                          Meine Quelldateien kommen aus einem CaTs System dass auf Java basiert.
                          Ziel ist folgendes:
                          So sieht die Tablle aus wenn ich so exportiert bekommen habe.
                          ARTNR Bild1 Bild2 Bild3 Bild4 Bild5 Bild6 Bild7 Bild8 Bild9 Bild10
                          A1 0101 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0102 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0103 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0104 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0105 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0106 00001_3.jpg 00001_2.jpg 00001_1.jpg
                          A1 0115 00002_2.jpg 00002_1.jpg
                          A1 0108 00002_2.jpg 00002_1.jpg
                          A1 0109 00002_2.jpg 00002_1.jpg
                          A1 0110 00002_2.jpg 00002_1.jpg
                          A1 0111 00002_2.jpg 00002_1.jpg
                          A1 0112 00002_2.jpg 00002_1.jpg
                          A1 0113 00002_2.jpg 00002_1.jpg
                          ................................................

                          So muss Sie fertig aussehen:
                          Spalte A Spalte B
                          00001_3.jpg A1 0101;A1 0102;A1 0103 ....
                          00001_2.jpg A1 0101;A1 0102;A1 0103 .....
                          00002_2.jpg A1 0115;A1 0108 ......

                          Folgendes hab ich schon, jedes Bild steht jetzt in der selben Spalte mit einer Artikelnummer.
                          BILD1 ART
                          00001_1.jpg A1 0101
                          00001_1.jpg A1 0102
                          00001_1.jpg A1 0103
                          00001_1.jpg A1 0104
                          00001_1.jpg A1 0105
                          00001_1.jpg A1 0106
                          00001_2.jpg A1 0101
                          00001_2.jpg A1 0102
                          00001_2.jpg A1 0103
                          00001_2.jpg A1 0104
                          00001_2.jpg A1 0105
                          00001_2.jpg A1 0106
                          00001_3.jpg A1 0101

                          Jetzt muss ich noch die selben Bildnummern zusammenfassen und die Artikelnummer ebenfalls in eine Zeile zusammenfassen durch ein Semikolon getrennt.
                          Und genau das hängt es bei mir.
                          PS: Meine Muster durch Leerzeichen zu trennen sieht ja recht bescheiden aus ^^

                          Comment


                          • #14
                            Originally posted by akretschmer View Post
                            Dir ist schon klar, daß das 2 komplett verschiedene Welten sind, also so Spielzeug wie Access und Datenbanken wie PostgreSQL?

                            Andreas
                            das hab ich auch schon gemerkt, und während ich XAMMP noch eingerichtet bekommen hab mit SQL und MY SQL ist das mit dem postgresql glaub ich ein wenig komplizierter.

                            Comment


                            • #15
                              Wozu XAMMP? Erstellst du eine Webanwendung?
                              Christian

                              Comment

                              Working...
                              X