Announcement

Collapse
No announcement yet.

SQL-Abfrage - Newbie-Problem

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

  • SQL-Abfrage - Newbie-Problem

    In einer von meinem Lehrer gestellten Abfrage, soll ich Schüler ermitteln die in ihrem Vorname mehr als 2 Vokale haben.

    Ich habe eine Liste erstellt mit allen Schülen mit den zusätzlichen Beziehungen ect.
    Alle anderen Abfragen haben super geklappt, also am Aufbau liegt es nicht.
    (Programm: MS Access)

    Nun in der SQL-Darstellung steht folgendes:

    SELECT*
    FROM Schueler
    WHERE Vorname ...

    .. und hier liegt das Problem: wie fange ich an zu ermitteln ? ich habe schon etliche Möglichkeiten versucht mit LEN ect.

    Schon mal danke im Voraus.

    LG MacUser

  • #2
    Kann Access evtl. regular expressions? Habt ihr sowas gemacht? Evtl. gehts darüber.

    Comment


    • #3
      Nein, wir befinden uns gerade in der Einführungsphase. (Access)

      Dieses Beispiel scheint unheimlich komplex zu werden.
      Ich habe immer noch keine Fortschritte gemacht.

      Comment


      • #4
        Mir würden nur verschachtelte INSTR (also: ist das Zeichen im String vorhanden) einfallen. Schön ist aber was anderes

        Comment


        • #5
          Danke

          Eigentlich gehts mir auch darum meinen Lehrer zu überzeugen.
          Der hat nämlich noch immer keine Lösung.

          Wenn du das für mich lösen könntest.
          Du wärst meine Rettung

          .. und bekommst meinen vollsten Respekt

          Comment


          • #6
            Hallo,

            mittels Translate und Replace müsste Access Buchstaben (z.B. a,e,i,o,u) ersetzen können. Bei mehr als zwei Ersetzungen gibt man das jeweilige Resultat aus.
            MfG
            Cheat-Sheets for Developers / Programming Quotes

            Comment


            • #7
              Danke.

              Nun, da ich noch ein brutaler Anfänger bin, weiß ich natürlich nciht wie ich mit dieser Information umgehen soll.

              Kannst du mir bitte den Lösungsweg zeigen ?


              Danke vielmals.

              Comment


              • #8
                Hallo,

                das ist wirklich tricky, Access kennt keine regulären Ausdrücke.

                Kannst du etwas VBA? Dann könnte man es darüber lösen, wäre aber kein reines SQL mehr.
                Dazu könnte man aber argumentieren, dass es im 'richtigen' SQL auch Funktionen und Prozeduren gibt.

                Prinzip:
                1. Lege ein Codemodul an mit einer public Function
                Code:
                Public function CountVoc(s as string) as Integer
                
                ' pruefe hier den String s (=Vorname) nach allen Regeln der VBA - Kunst
                ' Instr(), Mid() und co ... oder gar der Aufruf einer externen regex - dll
                ' ich würde Zeichen für Zeichen (for) durchgehen Mid() und die Vocale zählen (IN [...])
                
                end function
                2. Schreibe in deine Abfrage
                [highlight=sql]
                ... WHERE CountVoc(vorname) > 2 ....
                [/highlight]

                Was anderes fällt mir dazu leider nicht ein.
                Zuletzt editiert von tinof; 18.01.2011, 19:18.
                Ich habs gleich!
                ... sagte der Programmierer.

                Comment


                • #9
                  Lösungsweg
                  Das wird ohne Kenntnis des Wissensstands schwierig. Aber Operatoren sollten wohl schon vorgekommen sein: Wikibooks - SELECT
                  MfG
                  Cheat-Sheets for Developers / Programming Quotes

                  Comment


                  • #10
                    Hi,

                    http://office.microsoft.com/de-at/ac...001228898.aspx

                    Gruß

                    m

                    Comment


                    • #11
                      @Markus Lahr

                      Ja, haben schon ziemlich viel damit herumprobiert.
                      Alle Operatoren sind mir bekannt, bezüglich deinem Link.

                      Kennst du irgendwelche Tutorials in denen man sich in Sachen "MySQL" einarbeiten kann .. und auch aktiv in Access dann einsetzten kann ?

                      Comment


                      • #12
                        Da die Anzahl der Vokale überschaubar ist, gehts auch ohne Regex und VBA.
                        [Highlight=sql]
                        select name from (
                        select name from <table>
                        where name like '%a%'
                        union all
                        select name from <table>
                        where name like '%e%'
                        ...
                        )
                        group by name
                        having count(*) > 2
                        [/highlight]
                        Gruss 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


                        • #13
                          Moin,

                          @Falk, Einspruch!

                          Deine Abfrage sucht imho alle heraus, die (nur) mindestens einen Vokal im Namen haben aber mehr als zweimal in der DB vorkommen.

                          @MacUser
                          Der Platzhalter für LIKE ist in Access der '*', nicht '%'
                          MySQL und Access sind 2 nur entfernt verwandte Dinge, ein MySQL - Tutuorial hilft dir nur bedingt für Access. Schau' lieber direkt nach Access - Unterlagen.

                          Der Hinweis auf die replace() - Funktion ist gut, aber ACCESS scheint leider herumzuzicken, sobald man diese Funktion in einer Where Klausel hat.

                          edit: doch, so geht's:
                          [highlight=sql]
                          ... WHERE Len(name) - len(replace(replace(replace(name,'a',''),'e',''),' o','')) > 2 ..
                          [/highlight]

                          (alle Vokale ergänzen)
                          Zuletzt editiert von tinof; 19.01.2011, 08:04.
                          Ich habs gleich!
                          ... sagte der Programmierer.

                          Comment


                          • #14
                            Genau wie Tinof es schrieb; Vokale durch Leerzeichen ersetzen und dann die Differenz der Zeichenlänge mit/ohne Vokale ermitteln

                            [highlight=SQL]
                            SELECT Namen
                            FROM (SELECT Namen
                            ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Namen
                            , 'a', ''), 'e', ''), 'i', ''), 'o', ''), 'u', '') AS OhneVoc
                            FROM tblNamen) AS Sub
                            WHERE LEN(Namen) - LEN(OhneVoc) >= 2
                            [/highlight]
                            Olaf Helper

                            <Blog> <Xing>
                            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                            Comment


                            • #15
                              Coole Lösung Glaub da wär ich nicht so schnell drauf gekommen.

                              Hut ab!

                              Comment

                              Working...
                              X