jenslm: zwei abfragen verbinden

kann ich zwei msql-abfragen verbinden?
ungefaehr so:

SELECT felder FROM tab1 AND felder FROM tab2 WHERE parameter = "wert";

gilt WHERE dann fuer beide? so braeuchte ich es naemlich.

oder muss ich dass nacheinnander alles machen:

SELECT felder FROM tab1 WHERE parameter = "wert";

if(resultat == 0) {SELECT felder FROM tab2 WHERE parameter = "wert";}

lg, jens

  1. kann ich zwei msql-abfragen verbinden?

    Auch wenn ich msql nicht kenne, wird das vermutlich wie in anderen RDBMS mit UNION funktionieren - damit fügt man mehrere Ergebnismengen (mit derselben Feldliste) zusammen.

    1. Auch wenn ich msql nicht kenne

      tja da fehl wohl ein klitze kleiner buchstabe :D
      lg

      1. Auch wenn ich msql nicht kenne

        tja da fehl wohl ein klitze kleiner buchstabe :D

        Das macht nichts, es gibt ja nur 26 Möglichkeiten, wenn man davon ausgeht, dass du es mit der Groß- und Kleinschreibung nicht so genau nimmst, sind wir bei 52 - damit dürften wohl nur MSSQL und MySQL übrig bleiben. Mit UNION können beide umgehen.

    2. Moin!

      kann ich zwei msql-abfragen verbinden?

      Auch wenn ich msql nicht kenne, wird das vermutlich wie in anderen RDBMS mit UNION funktionieren

      msql ist ein offenbar heutzutage halbtoter Datenbankserver, für den PHP natürlich eine Extension mitbringt: http://de3.php.net/manual/de/intro.msql.php

      - Sven Rautenberg

      1. msql ist ein offenbar heutzutage halbtoter Datenbankserver, für den PHP natürlich eine Extension mitbringt: http://de3.php.net/manual/de/intro.msql.php

        Interessant - was du alles weißt - oder hast du ge-suchmaschinedeinerwahl-t?

        1. Hi!

          msql ist ein offenbar heutzutage halbtoter Datenbankserver, für den PHP natürlich eine Extension mitbringt: http://de3.php.net/manual/de/intro.msql.php
          Interessant - was du alles weißt - oder hast du ge-suchmaschinedeinerwahl-t?

          Handbuchen reicht. Vorteilhaft ist, wenn man schon ungefähr weiß, wo was drin steht, also bisher schon jede Menge gehandbucht hat.

          Lo!

    3. yo,

      Auch wenn ich msql nicht kenne, wird das vermutlich wie in anderen RDBMS mit UNION funktionieren - damit fügt man mehrere Ergebnismengen (mit derselben Feldliste) zusammen.

      das ist nicht richtig, ohne missionarisch wirken zu wollen, UNION <> UNION ALL. und was zwei abfragen (oder auch mehrere) zusammenfügt ist nun mal UNION ALL. welches von beiden er letztlich haben will, hängt davon ab, ob er wirklich die beiden ergebnismengen anhängen will oder aber zusammenführen will. aber ich tippe mal auf UNIION ALL ist das, was er sucht.

      Ilja

      1. das ist nicht richtig, ohne missionarisch wirken zu wollen, UNION <> UNION ALL.

        Das ist Unsinn bzw. i-Tüferl-Reiterei

        ALL ist ein zusätzliches Schlüsselwort zu UNION

        Das MySQL-Handbuch sagt dediziert im ersten Satz:
        UNION wird verwendet, um das Ergebnis einer Anzahl von SELECT-Anweisungen zu einer Ergebnismenge zusammenzufassen.

        Meine Aussage war:

        damit fügt man mehrere Ergebnismengen (mit derselben Feldliste) zusammen.

        Ich verstehe also das Problem nicht, nachdem die MySQL-Doku ja nur einen Artikel für UNION aufweist, wäre dieser Umstand ohnehin für für den OP ersichtlich geworden.

        1. moin,

          Das ist Unsinn bzw. i-Tüferl-Reiterei

          unsinn ist es mit sicherheit nicht, aber wohl i-Tüferl-Reiterei, zumal ich mich mit den begriffen selbst verschrieben habe. wichtig ist, dass man sich dem unterschied der beiden mengenoperatoren bewußt ist. hilfreich wäre es, wenn man dafür die gleichen begriffe verwendet. zusammenführen benutzt die mysql doku wohl unabhängig davon, ob es ein UNION oder ein UNION ALL ist. fakt ist die beiden machen was anderes und UNION "klebt" mal nicht zwei ergebnismengen aneinander, sondern filtert zusätzlich.

          Ich verstehe also das Problem nicht, nachdem die MySQL-Doku ja nur einen Artikel für UNION aufweist, wäre dieser Umstand ohnehin für für den OP ersichtlich geworden.

          das problem ist, dass hier in aller regel UNION vorgeschlagen wird, ohne genau zu wissen, ob nun UNION oder UNION ALL der richtige mengenopertor ist.

          Ilja

          1. das problem ist, dass hier in aller regel UNION vorgeschlagen wird, ohne genau zu wissen, ob nun UNION oder UNION ALL der richtige mengenopertor ist.

            Es _gibt_ keine Unterscheidung zwischen UNION und UNION ALL - das sind Äpfel und Birnen.

            ALL ist ein Schlüsselwort von UNION - ein alleinstehendes UNION verwendet implizit DISTINCT (das andere Schlüsselwort von UNION)

            Man kann höchstens explizit zwischen UNION DISTINCT und UNION ALL unterscheiden - es ist die Aufgabe des OP sich in die Dokumentation einzulesen und diesen Unterschied zu erfahren bzw. zu erfahren, dass DISTINCT das Standardverhalten der MySQL- oder MSSQL-Umsetzung von UNION ist - ein anderes DMBS kann das aber genau andersrum machen und es wäre im Rahmen des Standards völlig ok.

            Wenn jemand fragt, wie man mit PHP HTML-eigene Steuerzeichen maskiert und jemand htmlspecialchars('foo') vorschlägt, kommst du ja auch nicht daher und sagst "falsch", weil man muss zwischen htmlspecialchars('foo') und htmlspecialchars('foo', ENT_QUOTES); unterscheiden.

            Natürlich ist der Hinweis sinnvoll, aber es steht ausser Zweifel dass UNION den Wunsch des OP abdeckt - ich habe aber in keinem Wort erwähnt, dass das Vorgabeverhalten ausreichen wird.

            1. moin,

              Natürlich ist der Hinweis sinnvoll, aber es steht ausser Zweifel dass UNION den Wunsch des OP abdeckt - ich habe aber in keinem Wort erwähnt, dass das Vorgabeverhalten ausreichen wird.

              wenn du UNION vorschlägst werden 99,9% auch UNION verwenden, egal ob UNION ALL besser gewesen wäre. sich darauf zu berufen, "lies die Doku, ich habe dir nur ein Stichwort gegeben" ist vollkommen an der realität vorbei. das wäre so als wenn jemand einen OUTER JOIN sucht und ich ihm das wort JOIN hinschmeise.

              Ilja

              1. wenn du UNION vorschlägst werden 99,9% auch UNION verwenden, egal ob UNION ALL besser gewesen wäre.

                Aha - und wenn ich "ORDER BY" vorschlagen, werden auch 99,9 % die Sortierreihenfolge nicht angeben - ich verstehe nicht, worauf du hinaus willst.

                sich darauf zu berufen, "lies die Doku, ich habe dir nur ein Stichwort gegeben" ist vollkommen an der realität vorbei.

                Wenn man vernünftig arbeitet, sieht man sich die Dokumenation an um nach einem Beispiel zu suchen - für mich ist es sogar sehr realitäts- und praxisnah, einen Blick in die Doku zu werden, wenn ich eine Funktionalität verwenden möchte, deren Namen ich noch nichtmal kenne, geschweige denn wie die Syntax aussieht.

                das wäre so als wenn jemand einen OUTER JOIN sucht und ich ihm das wort JOIN hinschmeise.

                Das mit dem OUTER JOIN - besonders im Kontext von MySQL - musst du mir jetzt nochmal genauer erläutert. Du solltest aber aufpassen, dass du dich nicht verrennst ;)

                1. Aha - und wenn ich "ORDER BY" vorschlagen, werden auch 99,9 % die Sortierreihenfolge nicht angeben - ich verstehe nicht, worauf du hinaus willst.

                  man kann sich aber auch stur stellen. du vergleicht äpfel mit birnen. ORDER BY ohne eine zuätzliche spalte würde einen syntax fehler schmeissen. UNION geht aber so wie du es gesagt hast syntakitsch korrekt. die gefahr, dass der user es falsch benutzt und es noch nicht mal merkt (weil die ergebnisse auch noch auf den ersten blick zu stimmen scheinen) ist sehr, sehr hoch. es ist einer minderheit, die den operator UNION ALL kennt und auch richtig benutzt. wenn also jemand fragt, zwei abfragen aneinander zu setzen, dann ist der verweis auf UNION irreführend. man sollte dies bezüglich immer auf die unterschiede zwischen UNION und UNION ALL hinweisen. weil zusammen kleben macht der UNION ALL und nicht der UNION mengenoperator.

                  Ilja

                  1. weil zusammen kleben macht der UNION ALL und nicht der UNION mengenoperator.

                    Immer noch falsch - "zusammenkleben" tut das ALL-Schlüsselwort in Kombination mit UNION, zusammenführen ohne Duplikate tut das DISTINCT-Schlüsselwort in Kombination mit UNION. UNION alleine ohne angegebenes Schlüsselwort impliziert nur automatisch per Voreinstellung DISTINCT.

                    1. Immer noch falsch - "zusammenkleben" tut das ALL-Schlüsselwort in Kombination mit UNION

                      du kannst es nennen wie du willst, aber wo war den dein hinweis auf dein "ALL", als du ihm gesagt hast, das man mit UNION zwei ergebnismengen zusammenführt ?

                      1. du kannst es nennen wie du willst, aber wo war den dein hinweis auf dein "ALL", als du ihm gesagt hast, das man mit UNION zwei ergebnismengen zusammenführt ?

                        UNION führt zwei Ergebnismengen zusammen, genauso wie ORDER BY sortieren kann.

                        Ich habe nichts genauer spezifiziert - warum auch, es ist nicht meine Aufgabe, dem OP alles vorzubeissen und den halben Inhalt der Doku zu erklären.

                        1. Ich habe nichts genauer spezifiziert - warum auch, es ist nicht meine Aufgabe, dem OP alles vorzubeissen und den halben Inhalt der Doku zu erklären.

                          erstens kann man es gar nicht unterscheiden, in welchen kontext du UNION aufführst, im kontext eines schlüsselwortes innerhalb einer abfrage oder im kontext eines allgemeinen schlüsselwortes einer doku.

                          und zweitens, da du anscheined nicht bereit bist, dem OP ein wenig mehr infos zu geben, wo es wirklich notwendig wäre, weil es eben viele nicht kennen, wäre es besser, gar nichts zu sagen.

                          Ilja

                          1. und zweitens, da du anscheined nicht bereit bist, dem OP ein wenig mehr infos zu geben, wo es wirklich notwendig wäre, weil es eben viele nicht kennen, wäre es besser, gar nichts zu sagen.

                            Warum soll ich mir die Mühe machen, der OP ohnehin keien Reaktion zeigt? Einen happen vorwerfen - wenn der OP schlau genug ist, kann er damit selbst eine Lösung herbeiführen - wenn nicht und er noch an einer Lösung interessiert ist, kann er nachfragen.

                            Ich habe keine Lust, jemandem lang und breit Infos zu geben, wenn er ohnehin nie wieder kommt. Ebenso möchte ich niemandem abnehmen, sich selbst mit der Materie auseinanderzusetzen. Ich möchte auch nicht, dass mir jemand eine Lösung vorkaut, obwohl ich nur eine unspezifische Frage stelle.

                            Im übrigen: die Frage des OP war folgende

                            kann ich zwei msql-abfragen verbinden?

                            Sollte ich eine solche stellen, habe ich nichts dagegen, wenn mir jemand einfach mit "Ja" oder "Nein" antwortet.

                            1. Warum soll ich mir die Mühe machen, der OP ohnehin keien Reaktion zeigt?

                              wenn sich jemand nicht mehr meldet, das ist nicht wirklich gut. das ärgert mich ebenso. aber weißt du das schon im vorfeld ?

                              kann ich zwei msql-abfragen verbinden?

                              Sollte ich eine solche stellen, habe ich nichts dagegen, wenn mir jemand einfach mit "Ja" oder "Nein" antwortet.

                              wie gesagt, ich würde dir nahe legen, dann lieber gar nichts zu sagen, erspart allen viel ärger und diskussionen.

                              Ilja

                              1. wenn sich jemand nicht mehr meldet, das ist nicht wirklich gut. das ärgert mich ebenso. aber weißt du das schon im vorfeld ?

                                Nein, ich weiß es eben nicht - genau darum ziehe ich auch nicht gleich alle register. Wenn jemand tatsächlich interesse zeigt, bin ich gerne bereit zu helfen.

                                Sollte ich eine solche stellen, habe ich nichts dagegen, wenn mir jemand einfach mit "Ja" oder "Nein" antwortet.

                                wie gesagt, ich würde dir nahe legen, dann lieber gar nichts zu sagen, erspart allen viel ärger und diskussionen.

                                Warum sollte ich die Ingrid machen?

                                Und wenn mir jemand mit so einer Antwort kommt, freut es mich sogar, da ich darauf hingewiesen werde, dass meine Frage nicht ordentlich gestellt wurde.

                                Und meistens lösen sich Probleme schon durch ordentliches formulieren der Frage.

                                1. moin,

                                  Nein, ich weiß es eben nicht - genau darum ziehe ich auch nicht gleich alle register. Wenn jemand tatsächlich interesse zeigt, bin ich gerne bereit zu helfen.

                                  ich bin da auf deiner seite, eine frage haben und sich nicht mehr melden, ist nicht die feine art. aber gerade dann sollte man gleich zu beginn möglichst viel klären. eine antwort geben, mit der man gefahr läuft, eine lösung zu geben, die nur auf den ersten blick richtig ist, das ist für mich schlechter als gar keine antwort geben.

                                  Und meistens lösen sich Probleme schon durch ordentliches formulieren der Frage.

                                  unstrittig, aber wenn eine frage nicht klar formuliert ist, muss ich es ja mit den antworten nicht auch tun. profis wissen, wie UNION und UNION ALL funktioniert, die allermeisten, die hier hilfe suchen, wissen es aber nicht. und so schwierig kann es doch nicht sein, im kontext von mengenoperatoren darauf immer explizit hinzuweisen. und ich kann ehrlich gesagt nicht verstehen, warum wir darüber so lange diskutieren müssen.

                                  Ilja

  2. ok also so muesste es gehn
    SELECT * FROM tab1, tab2 WHERE tab1.parameter = "wert" AND tab2.parameter = "wert";

    nur hab ich dann SELECT * was nicht unbedingt perfekt ist
    wie umgeh ich das?

    lg, jens

    1. Mahlzeit jenslm,

      ok also so muesste es gehn
      SELECT * FROM tab1, tab2 WHERE tab1.parameter = "wert" AND tab2.parameter = "wert";

      Das wage ich zu bezweifeln.

      nur hab ich dann SELECT * was nicht unbedingt perfekt ist

      Das stimmt.

      wie umgeh ich das?

      Indem Du Dich zu dem von suit genannten "UNION" informierst. Alternativ könntest Du auch eine Handvoll Beispieldatensätze aus Deinen beiden Tabellen sowie die gewünschte Ergebnismenge zeigen ... dann können sich Deine Leser auch etwas unter Deinen Umschreibungen vorstellen.

      MfG,
      EKKi

      PS: Achja - was hat das Ganze im Übrigen mit PHP zu tun? Es scheint ein reines Datenbankproblem zu sein ...

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|