Announcement

Collapse
No announcement yet.

SQL Anfänger Updateanweisung

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

  • SQL Anfänger Updateanweisung

    Ich mache da etwas falsch und bevor ich alles falsche Poste frage ich lieber gezielt nach der Lösung weil es kürzer ist.

    Die zwei identischen Tabellen haben folgenden Felder: Name varchar(64) desc varchar(255)

    Also ich möchte von Tabelle1 die inhalte von "desc" kopieren nach Tabelle2

    Die Bedingung ist: das Feld "Name" in Tabelle 1 und 2 müssen identisch sein damit die Spalte von Tabelle 1 kopiert wird. Wie lautet die SQL syntax für Update mit dem Join?
    Vielen Dank
    Zuletzt editiert von scooter; 23.03.2010, 17:34.

  • #2
    Hallo,

    Update mit JOIN gibt es nur in bestimmten SQL-Dialekten, aber eine Subquery geht meist immer .

    [highlight=sql]
    update tabelle1 set
    `desc` = (select `desc`
    from tabelle2
    where tabelle2.name = tabelle1.name)
    [/highlight]

    Wichtig ist hierbei, dass die Zuordnung tabelle2.name = tabelle1.name eindeutig ist! Ansonsten gibt es einen "Subquery return more than one row"-Error

    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


    • #3
      Dankeschön

      Vielen Dank für die promte Hilfe

      Comment


      • #4
        Falls ein Wert in Tabelle 2 nicht vorhanden ist wird momentan der Bereich "Desc" auch aus der Tabelle 1 entfernt. Er sollte aber nicht entfernt werden

        Comment


        • #5
          Hallo,

          dann solltest du für dein UPDATE noch eine passende Where-Klausel angeben, z.B. mit WHERE EXISTS (SELECT ...

          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


          • #6
            Super, Danke für die promte Antwort

            Comment


            • #7
              wie kann ich wenn ich doppelte Einträge in der Tabelle desc habe diese entfernen?
              SELECT 'desc'
              From tabelle1
              Where (tabelle1.desc Having Count (*) >1)

              bringt Fehler1064 wegen Count

              Vielen Dank
              Zuletzt editiert von scooter; 23.04.2010, 16:37.

              Comment


              • #8
                Hallo,
                Originally posted by scooter View Post
                wie kann ich wenn ich doppelte Einträge in der Tabelle desc habe diese entfernen?
                Zum Löschen verwendet man vorzugsweise das DELETE-Statement.
                Originally posted by scooter View Post
                ...Where (tabelle1.desc Having Count (*) >1)
                Das ist natürlich Murks. Entweder du verwendest die Where-Klausel zum Einschräncken der Datenmenge oder die Having-Klausel, wenn du über bereits aggergierte Werte filtern willst. Aber beide ineinandergeschachtelt und ohne Group By-Klausel ... Hier solltest du nochmal einen Blick zur korrekten Syntax riskieren.

                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
                  Booh, total faslch formuliert. NAja Freitag Nachmittag halt. Also ich habe im linken Browser-Tab die Tabelle mit den Einträgen und wollte in einem zweiten Tab einen Select machen um dort nur die doppelten zu sehen. Nach Sichtpürfung ob der Select stiummt würde ich dann vorsichtig die Einträge (Ausgabe des Select) aus der Tabelle löschen.
                  Vielen Dank für die schnelle Hilfe
                  Zuletzt editiert von scooter; 26.04.2010, 09:21.

                  Comment


                  • #10
                    Zuerst solltest du mal definieren WAS doppelte Einträge sind. Auch solltest du dir Gedanken machen, WAS gelöscht werden soll. Alle "doppelten" oder nur einer oder alle bis auf einen und wenn ja welcher bleibt übrig!?

                    Mit einem:
                    [highlight=sql]
                    select f1, f2, f3, ..., count(id) anz
                    from tabelle
                    group by f1, f2, f3, ...
                    having count(id) > 1
                    [/highlight]
                    bekommst du erstmal alle "doppelten" Werte. Für die zugehörigen Datensätze mußt du diese Abfrage dann in einem Subselect verwenden.
                    [highlight=sql]
                    select *
                    from tabelle
                    where (f1, f2, f3, ...) in (
                    select f1, f2, f3, ...
                    from tabelle
                    group by f1, f2, f3, ...
                    having count(id) > 1
                    )
                    order by f1, f2, f3, ...
                    [/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


                    • #11
                      Ja Danke. Es sollen alle bis auf einen gelöscht werden. Da es auch nur maximal 4 gab habe ich den Select 3 mal gemacht und jedesmal die Ergebnisse geprüft und die Daten gelöscht. Somit ist jetzt alles bereinigt.

                      Comment


                      • #12
                        Danke Falk, konnte nach dem Beitrag die restlichen Dinge lösen

                        Comment


                        • #13
                          Ich wollt ein Update für eine Artikelgruppe machen und hatte folgenden Weg versucht.
                          UPDATE price SET '10' (SELECT FROM `tabelle1_price` WHERE category = 4) bekomme aber leider eine Fehlermeldung. Bin für jede Hilfe dankbar

                          Comment


                          • #14
                            Hallo,
                            Originally posted by scooter View Post
                            Ich wollt ein Update für eine Artikelgruppe machen und hatte folgenden Weg versucht.
                            UPDATE price SET '10' (SELECT FROM `tabelle1_price` WHERE category = 4) bekomme aber leider eine Fehlermeldung. Bin für jede Hilfe dankbar
                            1. Formatierung von SQL in Beiträgen
                            2. UPDATE Syntax
                            3. "bekomme aber leider eine Fehlermeldung" WELCHE Fehlermeldung


                            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


                            • #15
                              Superhinweis, Formatierung hatte ich verpennt, aber die Syntaxhilfe lösste einige Probleme, Danke dafür

                              Comment

                              Working...
                              X