Daniel: MySQL steh auf dem schlauch

Ahoi alle,

gibt es eine möglichkeit ein SELECT so zu erweitern:

SELECT id FROM tabelle WHERE spalte=wert WHEN NOT EXISTS spalte=andererwert

sprich das er mir alle id's aus einer tabelle gibt in der in der spalte
ein gewisser wert ist, aber kein anderer eintrag bezüglich dieser id mit
einem anderen wert in der spalte vorliegt? Diese id bezieht sich nicht
auf diese tabelle und darf daher mehrfach vorkommen (n:m beziehungstabelle)

MfG

  1. Hi!

    gibt es eine möglichkeit ein SELECT so zu erweitern:

    SELECT id FROM tabelle WHERE spalte=wert WHEN NOT EXISTS spalte=andererwert

    sprich das er mir alle id's aus einer tabelle gibt in der in der spalte
    ein gewisser wert ist, aber kein anderer eintrag bezüglich dieser id mit
    einem anderen wert in der spalte vorliegt? Diese id bezieht sich nicht
    auf diese tabelle und darf daher mehrfach vorkommen (n:m beziehungstabelle)

    Leider verstehe ich von der obigen Problemstellung kaum ein Wort - bitte lese dir deine Postings noch einmal durch, bevor du sie abschickst.
    Meinst du vielleicht, du willst alle IDs einer Tabelle ausgeben, die in einem Datensatz stehen, dessen Spalte1 den Wert »Wert1«, aber nicht den Wert »Wert2« besitzt? Wenn ja, dann hilft dir dieser Query weiter:

      
    SELECT  
          id  
    FROM  
          tabelle  
    WHERE  
          spalte = 'wert'  
    AND  
          NOT spalte = 'wert1'  
    
    

    Grüße,
    Fabian St.

    1. Hi,

      Meinst du vielleicht, du willst alle IDs einer Tabelle ausgeben, die in einem Datensatz stehen, dessen Spalte1 den Wert »Wert1«, aber nicht den Wert »Wert2« besitzt?

      unwahrscheinlich, denn das trifft immer dann bei einem entsprechenden Datensatz zu, wenn "Wert1" von "Wert2" unterschiedlich ist, und ansonsten nie. Was der Rezipient allerdings meinte, ist mir selbst auch nicht klar.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi!

        Meinst du vielleicht, du willst alle IDs einer Tabelle ausgeben, die in einem Datensatz stehen, dessen Spalte1 den Wert »Wert1«, aber nicht den Wert »Wert2« besitzt?

        unwahrscheinlich, denn das trifft immer dann bei einem entsprechenden Datensatz zu, wenn "Wert1" von "Wert2" unterschiedlich ist, und ansonsten nie. Was der Rezipient allerdings meinte, ist mir selbst auch nicht klar.

        Ähm, ja, das stimmt. Da habe ich wohl überhaupt nicht überlegt :-/

        Grüße,
        Fabian St.

    2. Er meinte wohl:
      Wenn in auch nur _einem_ einzigen Datensatz der wert2 existiert, dann will er gar nichts zurück bekommen.
      Andernfalls möchte er alle Datensätze zurückbekommen, die in dieser spalte den wert1 aufweisen
      lg Gerhard

      1. Fälschlicherweise verwendet er die Bezeichnung ID, was euch verwirrt haben wird. Er meint nur irgendeinen Zahlenwert der mehrfach vorkommen kann.

    3. Hallo Fabian,

      Leider verstehe ich von der obigen Problemstellung kaum ein Wort - bitte lese dir deine Postings noch einmal durch, bevor du sie abschickst.

      ging mir genauso, würde ich in diesem speziellen Fall Dir aber auch empfehlen *g*

      Meinst du vielleicht, du willst alle IDs einer Tabelle ausgeben, die in einem Datensatz stehen, dessen Spalte1 den Wert »Wert1«, aber nicht den Wert »Wert2« besitzt? Wenn ja, dann hilft dir dieser Query weiter:

      SELECT
            id
      FROM
            tabelle
      WHERE
            spalte = 'wert'
      AND
            NOT spalte = 'wert1'

        
      Wenn in einer bestimmten Spalte ein bestimmter Wert vorhanden ist, so kann in der gleichen Spalte nicht ein anderer Wert drin stehen, d.h. Deine Erweiterung um AND ändert nichts an der Ergebnismenge :-)  
        
      ~~~sql
        
      SELECT  
            id  
      FROM  
            tabelle  
      WHERE  
            spalte = 'wert'  
      
      

      Die Ergebnismenge davon ist - außer im Spezialfall wert = wert1 - identisch mit der Deines SELECT-Statements.

      Freundliche Grüße

      Vinzenz

      1. Hi Vinzenz!

        Leider verstehe ich von der obigen Problemstellung kaum ein Wort - bitte lese dir deine Postings noch einmal durch, bevor du sie abschickst.

        ging mir genauso, würde ich in diesem speziellen Fall Dir aber auch empfehlen *g*

        Ich habe es durchgelesen, mir in der Vorschau angeschaut und auch nochmal durch die Rechtschreibprüfung gejagt - aber das hilft natürlich nichts gegen inhaltliche Fehler, die ich in diesem Fall komplett übersehen habe ;-) Was ich zu meiner Verteidigung vorbringen kann, hmmm, am Freitag fangen die Ferien an und es geht weg nach Kroatien *freu* In dieser Stimmung vergisst man schon mal was :-D

        Grüße,
        Fabian St.

    4. Ahoi Fabian St.,

      also ich habe eine tabelle die so aussieht:

      -----------------------
      | verweis_id | spalte |
      -----------------------
      |   1        |  wert1 |
      -----------------------
      |   1        |  wert2 |
      -----------------------
      |   2        |  wert1 |
      -----------------------
      |   2        |  wert1 |
      -----------------------

      und ich möchte nun eine abfrage welche mir nur verweis_id 2 liefert. da
      zu verweis_id 2 ein datensatz vorhanden ist in dem in spalte auch wert2
      steht. geht das mit nem query oder muss ich das per PHP-code machen?
      hätte bei letzterem schon einen ansatz, stichwort array_diff();

      MfG

      1. Ahoi Daniel,

        um genauer zu sein hab ich solch eine tabelle

        --------------------------------------
        | verweis_id1 | verweis_id2 | spalte |
        --------------------------------------
        |     1       |     1       |  wert1 |
        --------------------------------------
        |     1       |     2       |  wert2 |
        --------------------------------------
        |     2       |     1       |  wert1 |
        --------------------------------------
        |     2       |     2       |  wert1 |
        --------------------------------------

        und ich will jetzt in diesem fall als rückgabe wert verweis_id1 = 2

        MfG

        1. um genauer zu sein hab ich solch eine tabelle


          | verweis_id1 | verweis_id2 | spalte |

          |     1       |     1       |  wert1 |

          |     1       |     2       |  wert2 |

          |     2       |     1       |  wert1 |

          |     2       |     2       |  wert1 |

          und ich will jetzt in diesem fall als rückgabe wert verweis_id1 = 2

          SELECT * FROM tabelle WHERE verweis_id1 = 2

          Aber das hatten wir ja schon, es ist immer noch nicht klar was du als Ergebnis willst.

          Struppi.

          1. Hallo Struppi,


            | verweis_id1 | verweis_id2 | spalte |

            |     1       |     1       |  wert1 |

            |     1       |     2       |  wert2 |

            |     2       |     1       |  wert1 |

            |     2       |     2       |  wert1 |

            und ich will jetzt in diesem fall als rückgabe wert verweis_id1 = 2

            Welcher Algorithmus führt dazu, dass die Rückgabe so aussieht?

            --------------------------------------
            | verweis_id1 | verweis_id2 | spalte |
            --------------------------------------
            |     1       |     1       |  wert1 |
            --------------------------------------
            |     1       |     2       |  wert2 |
            --------------------------------------
            |     2       |     1       |  wert1 |
            --------------------------------------
            |     2       |     2       |  wert1 |
            --------------------------------------
            |     3       |     1       |  wert3 |
            --------------------------------------

            Wie sähe in diesem Fall das Ergebnis aus?

            Freundliche Grüße

            Vinzenz

            1. Ahoi Vinzenz Mai,

              Wie sähe in diesem Fall das Ergebnis aus?

              geht garnicht weil wert3 gibts nicht, gibt nur 1/2 daher

              --------------------------------------
              | verweis_id1 | verweis_id2 | spalte |
              --------------------------------------
              |     1       |     1       |  wert1 |
              --------------------------------------
              |     1       |     2       |  wert2 |
              --------------------------------------
              |     2       |     1       |  wert1 |
              --------------------------------------
              |     2       |     2       |  wert1 |
              --------------------------------------
              |     3       |     1       |  wert1 |
              --------------------------------------

              und da sollte dann 2 und 3 zurückgegeben werden.

              MfG


              1. | verweis_id1 | verweis_id2 | spalte |

                |     1       |     1       |  wert1 |

                |     1       |     2       |  wert2 |

                |     2       |     1       |  wert1 |

                |     2       |     2       |  wert1 |

                |     3       |     1       |  wert1 |

                und da sollte dann 2 und 3 zurückgegeben werden.

                Wieso jetzt auf einmal 2 und 3, in welchem zusammenhang stehen diese Werte?

                Konntest du nicht mal versuchen der Reihe nach zu beschreiben, was eintreten soll, wie das Ergebnis zustande kommen soll, von welchen Bedingungen es abhängt.

                Du musst dir im klaren sein, dass wir nicht alles das was du weißt Wissen. Bis jetzt sind wir nur am raten und deine Resonanz darauf ist weder hilfreich noch geht sie auf die Vorschläge ein sodas man weiß was an dem Beispiel falsch ist.

                Struppi.

                1. Ahoi Struppi,

                  Konntest du nicht mal versuchen der Reihe nach zu beschreiben, was eintreten soll, wie das Ergebnis zustande kommen soll, von welchen Bedingungen es abhängt.

                  OK ein versuch noch dann gib ich die suche nach nem SQL-Statment auf und
                  machs mit php.

                  Gib mir alle werte von verweis_id1 in denen in spalte der wert = alpha
                  ist. gibt es einen weiteren datensatz mit identischer verweis_id1 und in
                  spalte dem wert=beta dann gib mir die verweis_id1 doch nicht.

                  per php gäbs diese lösung:

                  SELECT verweis_id1 FROM tabelle WHERE spalte=wert1
                  ID's in ein array speichern
                  SELECT verweis_id1 FROM tabelle WHERE spalte=wert2
                  ID's in ein anderes array speichern

                  in erstem array eintragä mit gleicher id wie im zweiten per array_diff(array1, array2) löschen.

                  ich würd das ganze aber gerne, fals möglich, in ein sql-statment packen.

                  MfG

                  1. Hallo Daniel,

                    Gib mir alle werte von verweis_id1 in denen in spalte der wert = alpha
                    ist. gibt es einen weiteren datensatz mit identischer verweis_id1 und in
                    spalte dem wert=beta dann gib mir die verweis_id1 doch nicht.

                    Nochmals:
                    Deiner Beschreibung hier fehlt die wichtige Bedingung, dass die Spalte "spalte" nur die Werte "alpha" und "beta" annehmen kann.

                    Weiterhin:
                    Ich kann mir nicht vorstellen, dass Deine Tabelle "tabelle" heißt. Das ist ein schlechter Tabellenname. Genauso sind meiner Meinung nach "verweis_id1", "verweis_id2" und "spalte" gute Spaltennamen.

                    Bitte gib' bei Deinen Anfragen die richtigen Namen an, mir fällt es damit leichter umzugehen. Für die folgende Lösung ist es unbedingt erforderlich, dass die Werte _exakt_ "alpha" und "beta" heißen, bzw. zumindest, dass Dein Wert, der _nicht_ vorkommen soll, größer ist als der andere.

                    Deswegen:
                    Bei nur zwei Werten gib bitte exakt Deine Werte an, nicht irgendwelche beliebigen Werte. Damit kann man zuwenig anfangen.

                    Nach dieser Predigt die Lösung für oben stehendes Problem:

                    "beta" darf nicht bei den gesuchten verweis_id1 vorkommen.
                    Da der Wert in der Spalte "spalte" nicht NULL sein darf, muss der Wert bei allen Vorkommen der gleichen verweis_id1 "alpha" sein.
                    Daraus folgt, dass für die gesuchten Einträge das Maximum aller Werte zu einer bestimmten verweis_id1 "alpha" sein muss.

                    Da in Deinem Suchkriterium eine Aggregatsfunktion (MAX()) vorkommt, musst Du nach der Spalte "verweis_id1" gruppieren. Aggregatsfunktionen dürfen im Normalfall _nicht_ in der WHERE-Klausel auftreten, Du musst also zum Einschränken Deiner Datensätze die HAVING-Klausel verwenden.

                    Somit ergibt sich folgendes Statement:

                      
                    SELECT  
                        verweis_id1  
                    FROM  
                        tabelle  
                    GROUP BY verweis_id1  
                    HAVING  
                        MAX(spalte) = 'alpha'  
                    
                    

                    Bitte beachte, dass die HAVING-Klausel erst nach der GROUP-BY-Klausel kommt, während eine (hier nicht vorhandene) WHERE-Klausel vor der GROUP-BY-Klausel einzuordnen ist, siehe MySQL-Handbuch.

                    Freundliche Grüße

                    Vinzenz

                    PS: Wäre bitte jemand, der sein Passwort zum Bugtracker nicht verlegt hat, so nett, im Bugtracker einzutragen, dass bei SQL-Statements das Schlüsselwort HAVING nicht als solches erkannt wird (zumindest in der Vorschau).

                    1. Hi Vinzenz!

                      PS: Wäre bitte jemand, der sein Passwort zum Bugtracker nicht verlegt hat, so nett, im Bugtracker einzutragen, dass bei SQL-Statements das Schlüsselwort HAVING nicht als solches erkannt wird (zumindest in der Vorschau).

                      »HAVING« wird als proprietäres Keyword [1] erkannt (<span class="prop-keyword">HAVING</span>), jedoch fehlt eine entsprechende Formatierung für diese Klasse im Standard-Forums-CSS. Ich werde das mal im Bugtracker eintragen.

                      Grüße,
                      Fabian St.

                      [1] Unter der Annahme, dass »prop« im Pattern-File für »proprietär« und »std« für Standard steht.

              2. Hallo Daniel,

                geht garnicht weil wert3 gibts nicht, gibt nur 1/2 daher

                ah ja, danke für die Info. Die hatten wir bisher noch nicht.

                Dann vermute ich, dass bei folgender Tabelle:

                --------------------------------------
                | verweis_id1 | verweis_id2 | spalte |
                --------------------------------------
                |     1       |     1       |  wert1 |
                |     1       |     2       |  wert2 |
                |     2       |     1       |  wert1 |
                |     2       |     2       |  wert1 |
                |     3       |     1       |  wert1 |
                |     4       |     1       |  wert2 |
                --------------------------------------

                2,3 und 4 zurückgegeben werden sollte?

                Nächste Frage: Spielen die Daten in der Spalte verweis_id2 in Deiner Logik eine Rolle? Wenn ja, welche? Wenn nein, dann könnte man sie einfach weglassen.

                Versuche uns bitte Deine Logik zu erklären. Gib alle Randbedingungen an, die wir wissen müssen, z.B. beschränkte Wertebereiche. Warum, das hat Struppi Dir bereits erklärt.

                Freundliche Grüße

                Vinzenz

                1. Ahoi Vinzenz Mai,

                  Dann vermute ich, dass bei folgender Tabelle:

                  2,3 und 4 zurückgegeben werden sollte?

                  nein nur 2 und 3 weil 4 in spalte Wert2 hat.

                  Nächste Frage: Spielen die Daten in der Spalte verweis_id2 in Deiner Logik eine Rolle? Wenn ja, welche? Wenn nein, dann könnte man sie einfach weglassen.

                  die logik ist ich will "SELECT verweis_id1 WHERE bedingung=true"

                  verweis_id1 = ein gegenstand (z.B. leere Bierdose)
                  verweis_id2 = person die ihn gekauft hat (z.B. Peter)
                  spalte = bezahlt (true/false)

                  es können aber mehrere personen den gleichen gegenstand kaufen,
                  allerdings kann eine person auch mehrere gegenstände kaufen =>
                  verweis_id1 n:m verweis_id2

                  Jetzt möchte ich alle gegenstände ausgeben für die schon komplett bezahlt wurde.

                  Mögliche fälle:

                  Gegenstand wurde von einer person gekauft und die hat bezahl=> ausgabe
                  Gegenstand wurde von mehreren person gekauft und die haben bezahl=> ausgabe
                  Gegenstand wurde von einer person gekauft und die hat nicht bezahl=> keine ausgabe
                  Gegenstand wurde von mehreren person gekauft und eine bis alle haben nicht bezahl=> keine ausgabe

                  hoffe jetzt ist es klar.

                  MfG

                  1. Mögliche fälle:

                    Gegenstand wurde von einer person gekauft und die hat bezahl=> ausgabe
                    Gegenstand wurde von mehreren person gekauft und die haben bezahl=> ausgabe
                    Gegenstand wurde von einer person gekauft und die hat nicht bezahl=> keine ausgabe
                    Gegenstand wurde von mehreren person gekauft und eine bis alle haben nicht bezahl=> keine ausgabe

                    hoffe jetzt ist es klar.

                    Schon besser, aber was willst du ausgeben?
                    Die Personen oder die Gegenstände?

                    Struppi.

                    1. Ahoi Struppi,

                      Schon besser, aber was willst du ausgeben?

                      als rückgabe wert des SELECTS möchte ich verweis_id1 (also die
                      gegenstandsID) die daten dessen hol ich mir dann aus ner andern tabelle
                      und gib bzw. will sie ausgeben.

                      MfG

                      1. Hallo Daniel,

                        Schon besser, aber was willst du ausgeben?

                        als rückgabe wert des SELECTS möchte ich verweis_id1 (also die
                        gegenstandsID) die daten dessen hol ich mir dann aus ner andern tabelle
                        und gib bzw. will sie ausgeben.

                        1. Hast Du meine Lösung im anderen Posting schon gesehen?

                        2. Welche MySQL-Version steht Dir zur Verfügung. Das ist bei MySQL eine wichtige Information, da die Fähigkeiten sich sehr stark unterscheiden.

                        Wenn Deine MySQL-Version aktuell genug ist, kannst Du die Daten möglicherweise mit _einem_ SQL-Statement holen. Dazu ist es aber notwendig, dass Du uns _alle_ relevanten Tabellen mit ihrem richtigen Namen, mit den richtigen Spaltennamen, mit den richtigen Werten und ein paar Beispieldatensätze gibst.

                        Freundliche Grüße

                        Vinzenz

                        1. Ahoi Vinzenz Mai,

                          1. Hast Du meine Lösung im anderen Posting schon gesehen?

                          Ja hab ich, aber noch nicht getestet.

                          1. Welche MySQL-Version steht Dir zur Verfügung.

                          da das ganze portable sein soll sollte dies keine rolle spielen und
                          die lösung auch bei einem anderen DBMS auf SQL basis funktionieren.

                          Deshalb habe ich nun den entschluss gefasst das ganze mit php zu
                          lösen. sprich ich hol mir alle verweis_id's mit dem wert1 in spalte
                          und speicher sie in ein array und dann hol ich mir alle verweis_id's
                          mit dem wert2 in spalte und hol mir dann mit array_diff() die ID's die
                          ich benötige.

                          trotzdem vielen dank für eure hilfe.

                          falls es was bringt hier die 3 tabellen entsprechend dem datenschutz leicht geraft

                          ------------------------------------
                          | id_gegenstand | gegenstandsdaten |
                          ------------------------------------
                          | 1             | XXXXXXXXXXXXXXXX |
                          ------------------------------------
                          | 2             | XXXXXXXXXXXXXXXX |
                          ------------------------------------
                          | 3             | XXXXXXXXXXXXXXXX |
                          ------------------------------------
                          ...
                          gegenstandsdaten = name, beschreibung, preis etc.

                          -----------------------------
                          | id_person | personendaten |
                          -----------------------------
                          | 1         | XXXXXXXXXXXXX |
                          -----------------------------
                          | 2         | XXXXXXXXXXXXX |
                          -----------------------------
                          | 3         | XXXXXXXXXXXXX |
                          -----------------------------
                          ...
                          personendaten = name, addresse etc.

                          ---------------------------------------
                          | gegenstand_id | person_id | bezahlt |
                          ---------------------------------------
                          | 1             |    1      |   0     |
                          ---------------------------------------
                          | 1             |    2      |   1     |
                          ---------------------------------------
                          | 2             |    1      |   1     |
                          ---------------------------------------
                          | 2             |    2      |   1     |
                          ---------------------------------------
                          | 2             |    3      |   1     |
                          ---------------------------------------
                          | 3             |    2      |   0     |
                          ---------------------------------------
                          | 4             |    5      |   1     |
                          ---------------------------------------
                          ...

                          0 = false
                          1 = true

                          MfG

                          1. Hallo Daniel,

                            1. Hast Du meine Lösung im anderen Posting schon gesehen?

                            Ja hab ich, aber noch nicht getestet.

                            1. Welche MySQL-Version steht Dir zur Verfügung.

                            da das ganze portable sein soll sollte dies keine rolle spielen und
                            die lösung auch bei einem anderen DBMS auf SQL basis funktionieren.

                            Teil 1 sollte von jedem handelsüblichen DBMS unterstützt werden, ist einfachstes SQL.

                            Deshalb habe ich nun den entschluss gefasst das ganze mit php zu
                            lösen. sprich ich hol mir alle verweis_id's mit dem wert1 in spalte
                            und speicher sie in ein array und dann hol ich mir alle verweis_id's
                            mit dem wert2 in spalte und hol mir dann mit array_diff() die ID's die
                            ich benötige.

                            Überflüssig, das kann mein Statement.
                            Welcher Wert soll übrigens nicht vorkommen, 0 oder 1?

                            Das folgende schau' ich mir zu späterer Stunde mal an, hier arbeitest Du am einfachsten mit SUBSELECTS, die jedes bessere DBMS unterstützt (Ausnahme: MySQL erst ab Version 4.1, siehe MySQL-Handbuch.

                            Wenn Du etwas ins SQL-Statement packen kannst, dann solltest Du dies tun.

                            Freundliche Grüße

                            Vinzenz

                      2. als rückgabe wert des SELECTS möchte ich verweis_id1 (also die
                        gegenstandsID) die daten dessen hol ich mir dann aus ner andern tabelle
                        und gib bzw. will sie ausgeben.

                        Naja, dafür gibt es joins, vielleicht sowas in der Art (ob das ORDER BY notwendig ist weiß ich nicht, du solltest natürlich statt den * die Felder auswählen die du brauchst)

                        SELECT b.*,a.* FROM bezahlt_tabelle AS a LEFT JOIN gegenstands_tablle AS b
                        ON a.gegenstand_id = b.id_gegenstand
                        WHERE a.bezahlt = 1
                        GROUP BY a.gegenstand_id
                        ORDER BY a.gegenstand_id
                        [ungetestet]

                        Struppi.

                        1. Ahoi Struppi,

                          GROUP BY a.gegenstand_id

                          das denke ich würde das ergebniss verfälschen. da ja zufällige
                          datensätze mit der gleichen gegenstand_id gruppiert werden und dann
                          erstdas where greift. die reihenfolge in welcher die datensätze im
                          enteffekt ankommen ist mir persöhnlich egal und vernachlässigbar.

                          MfG

                          1. GROUP BY a.gegenstand_id

                            das denke ich würde das ergebniss verfälschen. da ja zufällige
                            datensätze mit der gleichen gegenstand_id gruppiert werden und dann
                            erstdas where greift. die reihenfolge in welcher die datensätze im
                            enteffekt ankommen ist mir persöhnlich egal und vernachlässigbar.

                            Also ich hab mir jetzt mal die Mühe gemacht und das Szenario nachgebaut
                            Bei mir kommt 100% das Ergebniss raus was du willst.

                            Struppi.

                        2. Hallo Struppi,

                          SELECT b.*,a.* FROM bezahlt_tabelle AS a LEFT JOIN gegenstands_tablle AS b
                          ON a.gegenstand_id = b.id_gegenstand
                          WHERE a.bezahlt = 1
                          GROUP BY a.gegenstand_id

                          [...]

                          Es muss nach allen Feldern, die in der Abfrage auftauchen gruppiert werden, es sei denn bei den Feldern wird eine Aggregatsfunktion verwendet.

                          Trauriges MySQL, das solch fehlerhaften Statements ohne Fehlermeldung schluckt :-( Weiter Kommentare siehe Archiv.

                          Freundliche Grüße

                          Vinzenz

                          1. Hallo Vinzenz Mai

                            Hallo Struppi,

                            SELECT b.*,a.* FROM bezahlt_tabelle AS a LEFT JOIN gegenstands_tablle AS b
                            ON a.gegenstand_id = b.id_gegenstand
                            WHERE a.bezahlt = 1
                            GROUP BY a.gegenstand_id

                            [...]

                            Es muss nach allen Feldern, die in der Abfrage auftauchen gruppiert werden, es sei denn bei den Feldern wird eine Aggregatsfunktion verwendet.

                            alle Felder der Frage? Also a.bezahlt oder alle Felder der er haben will?
                            Ich weiß nicht welche Felder er braucht.
                            Zumindest ergibt das bei mir mit mySQL das richtige Ergebnis.

                            Trauriges MySQL, das solch fehlerhaften Statements ohne Fehlermeldung schluckt :-( Weiter Kommentare siehe Archiv.

                            Ich habe die Kommentare schon oft gelesen, nur verstanden habe ich sie nicht.
                            Wenn ich nach allen Feldern in der abfrage gruppiere kommt was völlig anderes raus.

                            Struppi.

          2. Ahoi Struppi,


            | verweis_id1 | verweis_id2 | spalte |

            |     1       |     1       |  wert1 |

            |     1       |     2       |  wert2 |

            |     2       |     1       |  wert1 |

            |     2       |     2       |  wert1 |

            SELECT * FROM tabelle WHERE verweis_id1 = 2

            wenn es doch nur so einfach wäre, ich will doch nur als rückgabe wert
            verweis_id1 wenn dazu in spalte bei keinem datensatz wert2 ist. daher
            bringt ein
            SELECT * FROM tabelle WHERE spalte != wert2
            auch nix, da dann auch die verweis_id1=1 ausgeben wird.

            ist das denn so kompliziert? oder versteht mich keiner weil ichs nicht
            richtig formuliert bekomm weil ich eh schon verwirrt bin?

            MfG


            1. | verweis_id1 | verweis_id2 | spalte |

              |     1       |     1       |  wert1 |

              |     1       |     2       |  wert2 |

              |     2       |     1       |  wert1 |

              |     2       |     2       |  wert1 |

              SELECT * FROM tabelle WHERE verweis_id1 = 2

              wenn es doch nur so einfach wäre, ich will doch nur als rückgabe wert
              verweis_id1 wenn dazu in spalte bei keinem datensatz wert2 ist. daher
              bringt ein
              SELECT * FROM tabelle WHERE spalte != wert2
              auch nix, da dann auch die verweis_id1=1 ausgeben wird.

              ist werte2 eine Variabel, für mich sieht es aus wie ein String.

              was passiert bei:
              SELECT * FROM tabelle WHERE spalte NOT LIKE "wert2" AND verweis_id1=1

              Struppi.

  2. yo,

    es geht mit einer abfrage, allerdings wäre es von vorteil, wenn dein dbms unterabfragen kann. ich gehe mal von mysql aus, welche version benutzt du den ?

    falls es unterabfragen kann, versuch mal folgendes.

    SELECT tab1.verweis_id1
    FROM tabelle as tab1
    WHERE tab1.verweis_id1 = wert1 AND
      (
      SELECT COUNT(*)
      FROM taballe AS tab2
      WHERE tab2.verweis_id1 = Wert1
      AND tab2.spalte = Wert2
      )
      = 0

    eine lösung ohne Unterabfragen könnte sich schwierig gestalten.

    Ilja