Announcement

Collapse
No announcement yet.

Textfeld aus einer Tabelle in eine andere kopieren

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

  • Textfeld aus einer Tabelle in eine andere kopieren

    Hallo Forum,
    Vielleicht könnt ihr mir bei meinem Problem weitehelfen.
    Ich habe 3 Tabellen
    1. Artikel (enthält die Schlüssel artistammid und artikelid)
    2. Artikeltext (mit Artikel über Schlüssel artistammid verbunden)
    3. Artikeladdon (mit Artikel über Schlüssel artikelid verbunden)


    Die Tabelle Artikeltext kann zum Artikel mehrere Zeilen enthalten. Mich interessiert aber nur die 1. Zeile.
    (arttextzeile=1)
    Die erste Textzeile soll nun von der Tabelle Artikeltext nach Tabelle Artikeladdon kopiert werden.

    Nun habe ich folgenden Lösungsansatz:
    [highlight=sql]
    UPDATE artikeladdon ao SET kt1 =
    (SELECT MAX(art.artTextText) FROM artikeltext art, artikel a
    WHERE art.artistammid = a.artistammid AND art.arttextzeile=1)
    WHERE ao.artikelid in (SELECT a2.artikelid FROM artikel a2)
    [/highlight]

    Unglücklich bin ich über 'MAX(art.artTextText)' weil ich nicht weiß, wie ich ein Textfeld isolieren kann.
    Lass ich Max weg erhalte ich einen Fehler, dass eine Unterabfrage nicht mehrere Zeilen zurückgeben darf.
    Ersetze ich max durch min , wird ein anderer Text in meine Tabelle artikeladdon eingetragen. Bisher habe ich es aber nicht geschafft, den korrekten Text in KT1 zu erhalten.
    Hat mir jemand einen Tipp, wie ich das Problem lösen könnte?
    Gruß
    Curt

  • #2
    wozu der join im subselect? die tabelle artikel nutzt du dort doch gar nicht.

    So würdest du ja in jede Zeile die erste Zeile ALLER Produkte schreiben. Dir fehlt der Bezug zu dem Artikel, den du updatest! Ich denke artikeladdon hat auch die artistammid?

    Code:
    UPDATE artikeladdon ao SET kt1 =
    (SELECT MAX(art.artTextText) FROM artikeltext art  WHERE art.artistammid = ao.artistammid AND art.arttextzeile=1)
      WHERE ao.artikelid IN (SELECT a2.artikelid FROM artikel a2)

    Comment


    • #3
      Hallo, und vielen Dank für die rasche Antwort.
      Die Tabelle Artikeladdon hat leider keine ArtiStammID.
      Die Tabelle Artikel ist das Bindeglied, da hier beide Schlüssel enthalten sind.
      Bei meinem Beispiel oben enthalten nach der Ausführung alle Datensätze der Tabelle ArtikelAddOn in KT1 den gleichen Text.
      Es ist der letzte Text in der Tabelle Artikeltext alfabetisch aufsteigend sortiert.
      Hast Du vielleicht noch einen Tipp?
      Ich wünsche allen ein schönes, sonniges Wochenede
      Curt

      Comment


      • #4
        Hallo,

        probier mal so:

        Code:
        update artikeladdon ao set kt1 =
        (select art.artTextText from artikeltext art, artikel a where 
        art.arttextzeile=1 and a.artistammid = art.artistammid and art.artikelid = ao.artikelid);
        Gruß,
        Uschi

        Comment


        • #5
          Hallo Uschi,
          vielen Dank für Deinen Vorschlag. Mein Problem ist, dass es 'art.ArtikelID' nicht gibt. Es gibt nur 'art.ArtikelStammID'
          In der Tabelle ARTIKEL sind beide Schlüssel gespeichert. In ArtikelAddOn gibt es nur die ArtikelID und in ArtikelText gibt es nur ArtikelStammID.
          Ich wünsch' Dir eine schöne Woche
          Curt

          Comment


          • #6
            Originally posted by CLL View Post
            wozu der join im subselect? die tabelle artikel nutzt du dort doch gar nicht.

            So würdest du ja in jede Zeile die erste Zeile ALLER Produkte schreiben. Dir fehlt der Bezug zu dem Artikel, den du updatest! Ich denke artikeladdon hat auch die artistammid?
            Dieser Hinweis war entscheidend. Danke! Man sollte immer genau hinschauen.
            Ob es so ganz korrekt ist, weiß ich nicht aber es funktioniert.
            Code:
             UPDATE artikeladdon ao SET kt1 =
            (SELECT max(art.artTextText) FROM artikeltext art, artikel a , 
              WHERE art.artistammid = a.artistammid AND ao.artikelid= a.artikelid AND art.arttxvarnummer=1
              AND Sprachnummer=0 AND a.lagernummer=1 AND art.arttextzeile=1)
              WHERE ao.artikelid = in (SELECT a2.artikelid FROM artikel a2)
            Zuletzt editiert von curbal; 21.08.2012, 10:31.

            Comment

            Working...
            X