Announcement

Collapse
No announcement yet.

SQL Abfrage

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

  • SQL Abfrage

    Hallo,

    ich habe folgende Tabellen zur Verfügung:

    Mitarbeiter:

    PNR Name Gehalt Flag
    1 Klug 2500
    2 Schlau 3000
    3 Blöd 1000 *
    4 Hohl 500
    3 Blöd 1000 *


    wie lautet nun die SQL Anweisung wenn bei flag ein Sternchen erscheinen soll wo die Zeile doppelt vorhanden ist?

    update mitarbeiter
    set flag = '*' where . . .

  • #2
    Hi,

    du musst einfach nach allen Spalten (mit Ausnahme von Flag) gruppieren und mit einer Having-Klausel und count() das Ergebnis auf die Zeilen einschränken, die mehr als einmal vorkommen. Weitere Infos findest du hier:

    http://www.infos24.de/mysqle/handbuch/3_mysql_count.htm
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      hm das hilft mir nicht sehr weiter, kannst du mir die Lösung per PN vielleicht schicken, dann kann ich es hoffentlich besser nachvollziehen...

      Comment


      • #4
        etwa so?

        update mitarbeiter
        set flag="*"
        where name in (
        select name
        from (select * from mitarbeiter) as x
        group by name
        having count(*) > 1
        )

        Comment


        • #5
          Ja, das ist schon mal nicht schlecht. Ich würde es noch ein bisschen ändern:

          [highlight=sql]
          UPDATE mitarbeiter
          SET flag='*'
          WHERE PNR IN (
          SELECT PNR
          FROM (mitarbeiter) AS x
          GROUP BY name
          HAVING count(*) > 1
          )
          [/highlight]
          "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

          Viele Grüße Novi

          Comment


          • #6
            warum bekomm ich jetzt immer eine Fehlermeldung, dass eine rechte Klammer fehlen würde???

            Comment


            • #7
              funktioniert nicht....

              Comment


              • #8
                Hallo,
                Originally posted by Novi View Post
                Ja, das ist schon mal nicht schlecht. Ich würde es noch ein bisschen ändern:

                [highlight=sql]
                UPDATE mitarbeiter
                SET flag='*'
                WHERE PNR IN (
                SELECT PNR
                FROM mitarbeiter AS x
                GROUP BY name
                HAVING count(*) > 1
                )
                [/highlight]
                Das ist syntaktisch falsch! Du kannst nicht PNR selektieren und nach name gruppieren. Solchen Unsinn läßt meines Wissens nur MySQL zu und ist kein sauberes SQL.

                Welches sind den die "Doppelungskriterien"? Für den Fall das es nur der Name ist:
                [highlight=sql]
                UPDATE mitarbeiter
                SET flag='*'
                WHERE name IN (
                SELECT x.name
                FROM mitarbeiter AS x
                GROUP BY x.name
                HAVING count(*) > 1
                )
                [/highlight]
                Bei Name und Gehalt entsprechend:
                [highlight=sql]
                UPDATE mitarbeiter
                SET flag='*'
                WHERE (Name, Gehalt) IN (
                SELECT x.Name, x.Gehalt
                FROM (mitarbeiter) AS x
                GROUP BY x.Name, x.Gehalt
                HAVING count(*) > 1
                )
                [/highlight]

                Gruß 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


                • #9
                  So gehts:
                  [highlight=sql]
                  UPDATE mitarbeiter
                  SET flag='*'
                  WHERE PNR IN (
                  SELECT PNR
                  FROM mitarbeiter
                  GROUP BY pnr
                  HAVING count(*) > 1
                  )
                  [/highlight]

                  Novi hat nur vergessen die klammern zu entfernen und das GROUP BY zu ändern.

                  LG chapster

                  Comment


                  • #10
                    ah jetzt funktioniert es danke

                    Comment


                    • #11
                      Originally posted by chapster View Post
                      Novi hat nur vergessen die klammern zu entfernen und das GROUP BY zu ändern.
                      Das passiert, wenn man das auf die schnelle postet. Ich musste zu einem Test, sonst hätte ich den Fehler wahrscheinlich noch behoben. Wirklich peinlich mein Fehler
                      "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                      Viele Grüße Novi

                      Comment

                      Working...
                      X