Announcement

Collapse
No announcement yet.

Vergleich zweier Tabellen

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

  • Vergleich zweier Tabellen

    Hallöle,

    ich habe mal wieder ein Problem bei dem ich nicht ganz verstehen kann weshalb die Procedure nicht funktioniert:

    Tabelle1 Tabelle 2
    tbl1_Name|missing|done tbl2_Name
    test1||2 test1
    test2||2 test3
    test3||2 test4
    test4||2 test4
    etc...

    Ich hätte gerne das Tabelle1 und Tabelle2 miteinander verglichen werden, d.h. wenn ein Wert in Tabelle 2 fehlt soll in Tabelle 1 im Feld missing "Missing in Tabl2" stehen ansonsten soll nichts rein.
    Das Feld tbl1_name hat leider immer ein Leerzeichen vor dem Namen und es kann sein das in der Tabelle2 die Namen in tbl2_Name doppelt oder gar nicht vorkommen.

    Ich habe das schon wie untenstehend probiert, aber ohne Erfolg

    Code:
    declare @name varchar(20);
    declare @x int;
    set @x=1
    while @x<1000
    begin
    SELECT @name=tbl1_Name FROM tabelle1 WHERE done = '2' or done = 2
    if LTRIM(@name) not in (select distinct tbl2_Name from tabelle2) update tabelle1 set missing = 'Missing in Tbl2' where tabelle1.tbl1_Name = @name
    if LTRIM(@name) not in (select distinct tbl2_Name from tabelle2) update tabelle1 set done = 3 where tabelle1.tbl1_Name = @name
    set @x=@x+1
    end
    Hoffe das meine Erklärung verständlich ist, wenn nnicht einfach nachfragen...

    Gruß,

    dodger

  • #2
    Hallo dodger,

    die Schleife ist irgendwie sinnlos; wenn der erste Datensatz in Tabelle1 und 2 vorhanden und done = 2 ist, dann bekommt die Schleife im nächsten Loop wieder den gleichen Datensatz.

    Und wieso so umständlich, das sollte in einem Rutsch funktionieren (...mengenorientiert!!!):
    [highlight=SQL]UPDATE Tabelle1
    SET missing = 'Missing in Tbl2',
    done = 3
    FROM Tabelle1
    LEFT Tabelle2
    ON LTRIM(Tabelle1.tbl1_Name) = LTRIM(Tabelle2.tbl2_Name)
    WHERE Tabelle2.tbl2_Name IS NULL
    AND (Tabelle1.done = '2'
    or Tabelle1.done = 2)
    [/Highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hi Olaf,

      ok point taken

      Jetzt bekomme ich aber folgende Fehlermeldung?!

      Incorrect syntax near the keyword 'ON'

      Ich verwende einen MS SQL 2000.

      Gruß,

      dodger

      Comment


      • #4
        Es fehlt nur das JOIN in

        FROM Tabelle1
        LEFT JOIN Tabelle2
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Aloha,

          habe es selber gelöst. Ich musste das LEFT durch ein LEFT OUTER JOIN ersetzen und schon lief es...

          Aber trotzdem vielen Dank weil das ist die weit aus schnellere Lösung...

          Gruß,

          dodger

          Comment

          Working...
          X