LIKE und JOINS

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

  • LIKE und JOINS

    Hi!

    Kann es sein, dass folgendes nicht funktioniert:

    SELECT *
    FROM table1, table2
    WHERE table1.table2_id = table2.id
    AND table2.id LIKE '%00%'

    Es geht jetzt besonders um den Teil hinter dem WHERE.
    Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
    - ...und solche Behauptungen in "falsches Resourcenmanagement"

  • #2
    Das mit dem LIKE ist richtig, aber der JOIN ist falsch. Mach einen INNER oder einen LEFT JOIN draus, mit entsprechender Join-Bedingung.
    ich glaube

    Kommentar


    • #3
      Original geschrieben von ministry
      Das mit dem LIKE ist richtig, aber der JOIN ist falsch.
      Der Join ist nicht wirklich falsch, höchstens schlecht. Und SELECT * FROM mit Joins grenzt an ein Verbrechen. Trotzdem sollte die Abfrage funktionieren.
      Sag mal, was das Attribut table2.id für einen Datentyp hat, und was für Werte da drin sind, die gefunden werden sollen. Und die Übereinstimmungen der entsprechenden id's muss natürlich auch vorhanden sein.
      Gruss
      H2O

      Kommentar


      • #4
        das war lediglich ein fiktives beispiel, deshalb *

        id ist der Primary Key: int, 5 stellig mit zerofill d.h. 00001, 00002, ...0000n

        Die Übereinstimmung des pk und fk stimmen also der Join funktioniert schon. Er findet ja auch etwas sobald ich das LIKE '%000%' bzw. LIKE '00001' durch ein = '00001' austausche
        Zuletzt geändert von zerni; 07.11.2007, 15:36.
        Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
        - ...und solche Behauptungen in "falsches Resourcenmanagement"

        Kommentar


        • #5
          Das funktioniert so natürlich nicht. Sowohl das ZEROFILLED, als auch die Länge eines nummerischen Attributes, beziehen sich ausschliesslich auf die Darstellung, nicht auf die Speicherung. Auf letztere hast du keinen Einfluss. Deshalb musst du die Abfrage auch nummerisch gestalten. Wenn du also - was deine Abfrage suggeriert - alle höchsten dreistelligen Werte haben willst, lautet die Abffrage:
          Code:
          WHERE table2.id < 10000
          Gruss
          H2O

          Kommentar


          • #6
            es geht darum, dass ich eine on the fly suche mit ajax habe und dort die ID nach und nach eingegeben und ein EventObserver nach 1,5 Sek. ohne Eingabe die SQL Query ausführt wird.

            d.h. erst:
            0
            000
            00004

            Wie wäre das anders zu realisieren als mit LIKE? Würdest du vllt INSTR(str,substr) dafür nutzen?

            Das würde ja aber auch nichts bringen, da lediglich bei der Darbietung der Daten das Zerofill genutzt wird.

            Ich würde das Feld eher ungern als varchar deklarieren...
            Zuletzt geändert von zerni; 07.11.2007, 16:22.
            Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
            - ...und solche Behauptungen in "falsches Resourcenmanagement"

            Kommentar


            • #7
              Da wird dir nichts anderes übrig bleiben, als entweder gescheitere Daten zu liefern, oder diese in deinem Script in einen nummerischen Zusammenhang zu bringen, z.B.
              • 0 => < 10000
              • 000 => < 1000
              • 0004 => BETWEEN 40 AND 49

              Ich kann mir allerdings micht vorstellen, was das Ganze überhaupt soll. Eine Id sollte ja keine Bedeutung haben, deshalb macht eine Abfrage darauf auch keinen Sinn. Und so, wie du die Werte abfragen willst, sieht es aus, als hätte die Id sogar verschiedene Bedeutungen, d.h. jede Stelle eine weitere. Da bekommst du wahrscheinlich ein Problem mit der Datenstruktur.
              Gruss
              H2O

              Kommentar


              • #8
                naja die id ist gleichzeitig eine Kundennr.

                und Probleme mit der Struktur gibt es da eigentlich keine. Dann werd ich wohl keine Livesuche für die Kundennr. anbieten.
                Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                - ...und solche Behauptungen in "falsches Resourcenmanagement"

                Kommentar


                • #9
                  Original geschrieben von zerni
                  Dann werd ich wohl keine Livesuche für die Kundennr. anbieten.
                  Oder du speicherst die Kundennummer als String und fügst der Tabelle eine echte, vom System vergebene Id zu.
                  Allerdings bin ich der Meinung, dass auch diese Abfragen auf bestimmte Stellen der Kundennummer keinen Sinn machen, da man eine Kundennummer entweder weiss - dann kann man auf die Ganze abfragen - oder eben nicht.
                  Gruss
                  H2O

                  Kommentar


                  • #10
                    Oder du sparst dir das Zerofill! Wenn dir die Kundennummern dann "zu kurz" werden, beginne halt erst bei 10000!

                    Kommentar

                    Lädt...
                    X