Announcement

Collapse
No announcement yet.

Daten aus der Artikeltabelle in MerkmalArtikeltabelle zuordnen

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

  • Daten aus der Artikeltabelle in MerkmalArtikeltabelle zuordnen

    tArtikel
    kArtikel cArtNr cHAN kHersteller cVaterArtikel nIstVater Kennzeichen
    1 SA-123456-00 123456 12 100100 0 9264
    2 SA-654321-00 654321 12 200200 0 9264
    3 SA-987654-00 987654 12 1 9264
    4 SA-456789-00 456789 12 400400 0 9264
    kArtikelMerkmal
    kMerkmal kMerkmalWert kArtikel
    10 9666 7
    20 6999 99
    30 8955 100
    40 8855 202


    Hallo an Alle,

    ich habe ein Problem und komme nicht weiter. Ich hoffe, dass mir jemand hilft:
    Ich habe eine Tabelle „tArtikel“, in der alle Artikel aufgelistet sind. Die Artikel, die eine Endung „-00“ haben, soll die Farbe schwarz zugewiesen werden. Allerdings ist bei den Artikeln das Problem, dass einige Artikel bereits die Farbe schwarz verfügen, sodass es bei meiner SQL-Anweisung eine Fehlermeldung erscheint, dass die Farbe bereits zugewiesen ist.
    In der Tabelle „tArtikelMerkmal“ werden den Artikeln die Farbwerte zugewiesen (kMerkmal= 10 = Farbe und kMerkmalWert=9666= blau).
    Nun meine Frage:
    Ich kann die Artikel filtern, die die Farbe schwarz nicht verfügen:
    Select kMerkmal, kMerkmalWert, KArtikel from tArtikelMerkmal where kArtikel = (Select * from tArtikel where cArtNr=‘SA-%%-00‘) and kMerkmalWert !=6666 (schwarz).

    Nach dieser Abfrage erscheint eine Liste mit über 2700 Werten. Wie kann ich nun diese Ergebnisse in die Tabelle tArtikelMerkmal mit der Farbe einfügen.

    Ich habe bereits versucht die Methode INSERT INTO anzuwenden. Aber auch da kam eine Fehlermeldung, weil man bi diesem Befehl maximal 1000 Zeilen in Anspruch nehmen kann und bei einem INSERT INTO VALUES Befehl nicht nur ein kArtikel zugewiesen wird, sondern alle.

    Ich habe schon gesucht und bin da auf den Befehl if not esists gekommen.

    LG

    SA_Luebeck

  • #2
    Wieso ein insert und kein update?
    Die Daten sind doch schon in der DB
    Dein select ist imho hinsichtlich
    kArtikel = (Select * from tArtikel where cArtNr=‘SA-%%-00‘)
    falsch. kArtikel ist jede Spalte des Subselects?

    Er sollte wie der select sein, bloß der Subsselect muss kArtikel des Artikels der Tabelle kArtikelMerkmal zurückgeben. Der Subselect prüft also ob der passende Datensatz aus der Tabelle tArtikel am Ende-00 hat



    select * from kArtikelMerkmal am where
    (
    select 1 from tArtikel ta where cArtNr=‘SA-%%-00 and am.kArtikel=ta.Artikel
    )=1

    Prüfen, ob es die richtigen sind und dann

    update kArtikelMerkmal am set kMerkmal=10, kMerkmalwert=9666 where
    (
    select 1 from tArtikel ta where cArtNr=‘SA-%%-00 and am.kArtikel=ta.Artikel
    )=1
    Zuletzt editiert von Christian Marquardt; 14.12.2019, 16:42.
    Christian

    Comment


    • #3
      Vielen Dank für deine Antwort.


      im ersten Versuch hatte ich auch ein Update auf die Tabelle tArtikelMerkmal versucht, in dessen Unterabfrage ich in tabelle tArtikel alle Artikel aufgesucht hatte die mit SA beginnen und 00 enden. Das Problem bei der ganzen Sache ist, dass ich bereits Artikel habe, die bereits in der Tabelle tArtikelmerkmal alle Farben zugeordnet haben aber nicht die Farbe schwarz. Kurz gesagt muss ich folgende Abfrage verfügen:

      In Tabelle tArtikelmerkmal muss folgendes abgefragt werden:


      Suche mir alle Artikel aus der Tabelle tArtikel heraus, die die Farbe schwarz nicht verfügen und prüfe in Tabelle tArtikelMerkmal, ob der jeweilige Artikel bereits die Farbe schwarz zugeordnet bekommen hat. Wenn nicht, dann füge eine Zeile in tArtikelMerkmal mit der Farbzuordnung schwarz hinzu.

      In der Tabelle tArtikel sind fast 8000 Artikel, denen ich die Farbzuordnung schwarz durchführen muss. Muss das nicht in einer Schleife passieren wie z. B. While- oder if-schleife?

      Meine Abfrage war:

      Update tArtikelMerkmal
      Set kArtikel =(Select kArtikel from tArtikel where cArtNr='SA-%%-00')
      where kMerkmalWert != 6666


      Erstmal ist ein set in diesem Update-Befehl nicht richtig, weil eine Zeile nicht geändert werden soll, sondern die Existenz geprüft und eventuell eingefügt werden soll. Und die Select-Anweisung in dem Set-Befehl führt zu einer Fehlermeldung, weil nicht nur ein kArtikel, sondern mehrere kArtikel ausgegeben werden. Das gleiche Problem hatte ich bei dem Insert-Befehl.

      Irgendwie müssen doch diese knappen 8000 Zeilen abgefragt und eingefügt werden können

      Comment


      • #4
        ...
        select 1 from tArtikel ta where cArtNr=‘SA-%%-00 and am.kArtikel=ta.Artikel and Artikel<>schwarz oder weitere Bedingungen
        ...
        Zuletzt editiert von Christian Marquardt; 15.12.2019, 15:37.
        Christian

        Comment

        Working...
        X