Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] 2 Abfragen verknüpfen, dass nur gleiche Ergebnisse überleben!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] 2 Abfragen verknüpfen, dass nur gleiche Ergebnisse überleben!

    Im Grunde sagts schon die Überschrift:
    Ich habe 2 Abfragen (oder mehr), die ich so verknüfen will, dass nur ein Ergebnis zurückkommt und zwar das, was in allen Abfragen gleich ist.

    Z.B. Sagen wir ich würde in 2 Abfragen ein Feld Text anfordern und Abfrage A würde: Haus, Wiese, Keller zurückgeben und die andere Abfrage Wanne, Küche, Wiese
    dann müßte in meiner Traum-verknüfungsabfrage nur "Wiese" als Ergebnis kommen, weil es bei beiden Abfragen vorkommt.

    Wie heißt das Zauber-verknüfungs-Wort? (Gibts das überhaupt?)

    Ich kann das leider nicht in eine Abfrage packen...

    Danke und VG!

  • #2
    Zitat von ballotade Beitrag anzeigen

    Wie heißt das Zauber-verknüfungs-Wort? (Gibts das überhaupt?)
    Intersect.

    Gibt es in jeder richtigen Datenbank.


    http://www.postgresql.org/docs/9.4/s...ql-select.html
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Hi, danke für die schnelle Antwort.

      Leider hat MySQL intercept nicht im Zauberkasten...

      Kommentar


      • #4
        Zitat von ballotade Beitrag anzeigen
        Hi, danke für die schnelle Antwort.

        Leider hat MySQL intercept nicht im Zauberkasten...
        Ja, Wie so viele andere Dinge halt auch nicht.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          this http://www.peterkropff.de/site/mysql/joins.htm

          Zweites Ergebnis bei der Googlesuche: 'mysql intersect' = http://stackoverflow.com/questions/2...rsect-in-mysql
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          Kommentar


          • #6
            Hallo, die beiden Links habe ich auch schon besucht.
            Bringt mich leider nicht wirklich weiter...
            Mein Problem ist deswegen besonders speziell, weil die verschiedenen Abfragen, deren Ergebnisse ich als Schnittmenge haben möchte, die gleichen Tabellen durchsuchen.

            Kommentar


            • #7
              Gib doch mal konkrete Beispiele der Datenstruktur und Datensätze damit man mit Tipps nicht ins Dunkle greift.
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar


              • #8
                Zitat von ballotade Beitrag anzeigen
                Mein Problem ist deswegen besonders speziell, weil die verschiedenen Abfragen, deren Ergebnisse ich als Schnittmenge haben möchte, die gleichen Tabellen durchsuchen.
                Das klingt so, als wäre Dir WHERE bis jetzt unbekannt.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Okay, ich versuche es mal:

                  Es gibt eine HAUPTTABELLE:

                  NAMEN ID
                  Peter 1
                  Max 2
                  Hans 3


                  Außerdem gibt es eine UNTERTABELLE. Ihre Datensätze sind über das Feld Haupttabelle_ID mit ID (aus der HAUPTTABELLE) verknüpft.

                  UNTERTABELLE:
                  Text Haupttabelle_ID
                  Haus 1
                  Wiese 1
                  Pferd 1
                  Wiese 2
                  Keller 2
                  Garten 2
                  Haus 3
                  Pferd 3
                  Wiese 3

                  Jetzt möchte ich eine Abfrage machen, bei der ich z.B. schaue, welcher NAME hat alles in der Untertabelle im Feld Text den Eintrag "Wiese" UND "Pferd". Also eine Schnittmenge dieser beiden...
                  Das Ergebnis hier müßte sein: Peter und Hans, weil beide diese Einträge haben, aber nicht Max, weil der nicht den Eintrag "Pferd" in der Unterebenentabelle hat...

                  Ist es etwas klarer?

                  Kommentar


                  • #10
                    Zitat von ballotade Beitrag anzeigen

                    Ist es etwas klarer?
                    Ja, Der JOIN ist ja nur Würze, daher mal ohne:

                    Code:
                    test=*# select * from ballotade ;
                       t    | id
                    --------+----
                     haus   |  1
                     wiese  |  1
                     pferd  |  1
                     wiese  |  2
                     keller |  2
                     garten |  2
                     haus   |  3
                     pferd  |  3
                     wiese  |  3
                    (9 rows)
                    
                    Time: 0,184 ms
                    test=*# select * from (select id, array_agg(t) as a from ballotade group by id) foo where a @> array['wiese','pferd'];
                     id |         a
                    ----+--------------------
                      1 | {haus,wiese,pferd}
                      3 | {haus,pferd,wiese}
                    (2 rows)
                    Vermutlich kann MySQL das aber auch nicht, oder?
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Gelöst!

                      @akretschmer: Ich fürchte MySQL ist kein Porsche sondern nur ein Käfer.

                      Ich habe eine Lösung, die aber immerhin funktioniert:

                      PHP-Code:
                      SELECT name from HaupttabelleUntertabelle as ut1Untertabelle as ut2 WHERE ID=ut1.Haupttabelle_ID and ID=ut2.Haupttabelle_ID and ut1.text='Pferd' and ut2.text='Wiese' 
                      Wenn einer von euch noch was eleganteres findet immer her damit!!

                      Kommentar


                      • #12
                        Ich markiere das hier jetzt als gelöst!

                        Kommentar


                        • #13
                          Zitat von ballotade Beitrag anzeigen
                          PHP-Code:
                          SELECT name from HaupttabelleUntertabelle as ut1Untertabelle as ut2 WHERE ID=ut1.Haupttabelle_ID and ID=ut2.Haupttabelle_ID and ut1.text='Pferd' and ut2.text='Wiese' 
                          Wenn einer von euch noch was eleganteres findet immer her damit!!
                          Explizite Join-Syntax verwenden -> inner join
                          Ist besser lesbar.

                          @mysql-bashing:
                          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                          Kommentar


                          • #14
                            Ich gebe zu, dass ich INNER Join noch nie verwendet habe. Wie sähe das aus?

                            Kommentar


                            • #15
                              Zitat von ballotade Beitrag anzeigen
                              @akretschmer: Ich fürchte MySQL ist kein Porsche sondern nur ein Käfer.

                              Ich habe eine Lösung, die aber immerhin funktioniert:

                              PHP-Code:
                              SELECT name from HaupttabelleUntertabelle as ut1Untertabelle as ut2 WHERE ID=ut1.Haupttabelle_ID and ID=ut2.Haupttabelle_ID and ut1.text='Pferd' and ut2.text='Wiese' 
                              Wenn einer von euch noch was eleganteres findet immer her damit!!
                              Das ist natürlich alles andere als schön, weil es skaliert nicht. Wenn Du eines Tages nach 3 gemeinsammen Dingen suchst ist das nicht einfach durch eine Erweiterung des Where zu lösen, sondern Du mußt nochmals Joinen. Das ist echt Lichtjahre von einer angenehmen Lösung entfernt und kann nur als absolute Frickellösung durchgehen.
                              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                              Kommentar

                              Lädt...
                              X