Announcement

Collapse
No announcement yet.

Update 1 Tabelle in eine andere (2) unter berücksichtigung der Artikelnr

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

  • Update 1 Tabelle in eine andere (2) unter berücksichtigung der Artikelnr

    Hallo Freunde

    Ich weiß nicht sorichtig wie ich das Update schreiben soll. Ich bekomme es nicht hin, dass aus Tabelle Testen -Matchcodeneu mit der Tabelle XArtikel - Matchcode über die TE_ID=Artikelnr verglichen und dann in der XArtikel Tabelle aktualisiert werden (Falls vorhanden).

    - Datenbank benuzen wir den Firebird (soll wohl mehrere SQL Dialekte interpretieren können)

    z.B.:

    Xartikel
    Artikelnr | Matchcode
    --------------------------
    1 | xxx
    2 | xxx
    3 | zzz
    4 | zzz
    5 | zzz


    Testen
    TE_ID | Matchcodeneu
    -------------------------------
    2 | 123-321
    3 | 122-232
    5 | 124-233

    nach dem update soll die Tabelle XArtikel dann so Aussehen:

    Xartikel
    Artikelnr | Matchcode
    ---------------------------
    1 | xxx
    2 | 123-321
    3 | 122-232
    4 | zzz
    5 | 124-233

    Das Select was in die update anweisung rein kommen könnte:

    SELECT Matchcodeneu
    FROM Testen
    INNER JOIN XArtikel
    ON Testen.TE_ID=XArtikel.artikelnr

    Wie sieht die richtige Update Syntax für mein Problem aus? bzw. Darf man überhaupt einen JOIN in einer Update-Anweisung benutzen?
    Brauch ich noch eine Vergleichsspalte? oder Bedingung?

    Hilfe.......

    MFG Flumi12

  • #2
    Hallo,

    [highlight=sql]
    update Xartikel a
    set Matchcode= (Matchcodeneu from Testen b
    where a.Artikelnr=b.TE_ID)

    [/highlight]

    Teste es mal vorm commit.

    Gruß

    Martin
    Zuletzt editiert von Martin R.; 07.09.2011, 15:21. Reason: ab

    Comment


    • #3
      Hallo Martin...

      Danke für die Blitzschnelle Antwort.

      Leider bekomme ich eine Fehlermeldung. SQL error code =-104 line 2 column 32
      Wahrscheinlich kann er das FROM nicht interpetieren. Geht das auch mit nem SUB SELECT

      MFG Flumi12

      Comment


      • #4
        Zusatz:

        UPDATE Xartikel a
        SET Matchcode= (select Matchcodeneu FROM Testen b
        WHERE a.Artikelnr=b.TE_ID)

        Das funktioniert in soweit, dass er den Matchcode aktualisiert aber bei denen der vergleich a.Artikelnr=b.TE_ID nicht zutrifft, löscht er den alten Matchcode ()

        Tabelle nach update sieht jetzt so aus:

        Xartikel
        Artikelnr | Matchcode
        ---------------------------
        1 |
        2 | 123-321
        3 | 122-232
        4 |
        5 | 124-233

        Fehlt da noch eine bedingung?

        Comment


        • #5
          Originally posted by Flumi12 View Post
          Zusatz:

          UPDATE Xartikel a
          SET Matchcode= (select Matchcodeneu FROM Testen b
          WHERE a.Artikelnr=b.TE_ID)

          Das funktioniert in soweit, dass er den Matchcode aktualisiert aber bei denen der vergleich a.Artikelnr=b.TE_ID nicht zutrifft, löscht er den alten Matchcode ()

          Tabelle nach update sieht jetzt so aus:

          Xartikel
          Artikelnr | Matchcode
          ---------------------------
          1 |
          2 | 123-321
          3 | 122-232
          4 |
          5 | 124-233

          Fehlt da noch eine bedingung?
          Sorry,

          genauso wie das 'select' habe ich auch die where Bedingung vergessen.

          [highlight=sql]
          update Xartikel a
          set Matchcode= (Matchcodeneu from Testen b
          where a.Artikelnr=b.TE_ID)
          where a.Artikelnr in (select c.TE_ID from Testen c);

          [/highlight]

          nicht mein Tag heute, sorry;-)

          Comment


          • #6
            Hallo Martin...

            Dank dir für deine hilfe... jetzt klappts echt Prima.... Danke Danke Danke

            Zusammenfassend:
            Tabelle Testen -Matchcodeneu mit der Tabelle XArtikel - Matchcode über die TE_ID=Artikelnr verglichen und dann in der XArtikel Tabelle aktualisieren

            xartikel
            Artikelnr | Matchcode
            --------------------------
            1 | xxx
            2 | xxx
            3 | zzz
            4 | zzz
            5 | zzz


            Testen
            TE_ID | Matchcodeneu
            -------------------------------
            2 | 123-321
            3 | 122-232
            5 | 124-233

            *************

            UPDATE Xartikel a
            SET Matchcode= (Select Matchcodeneu FROM Testen b
            WHERE a.Artikelnr=b.TE_ID)
            WHERE a.Artikelnr IN (SELECT c.TE_ID FROM Testen c);

            *************

            Ergebniss:

            Xartikel
            Artikelnr | Matchcode
            ---------------------------
            1 | xxx
            2 | 123-321
            3 | 122-232
            4 | zzz
            5 | 124-233

            Comment


            • #7
              Falls auch Datensätze eingefügt werden sollen, welche noch nicht in der ersten Tabelle stehen, empfehle ich MERGE: http://www.firebirdsql.org/refdocs/l...d21-merge.html

              Ist sowieso eleganter

              Code:
              MERGE INTO Xartikel a
              USING  Testen b
              WHEN MATCHED THEN UPDATE SET a.Matchcode=b.Matchcodeneu
              WHEN NOT MATCHED THEN INSERT(Artikelnr,Matchcode) 
                VALUES (b.TE_ID, b.Matchcodeneu)

              Comment

              Working...
              X