1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL-Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von sqler, 9 November 2011.

  1. sqler

    sqler Benutzer

    Hallo!

    Irgendwie stehe ich wohl gerade auf dem Schlauch...

    Ich habe drei Tabellen, welche je ein Feld Lieferant und ein Feld Ort haben. Diese beiden Felder aller drei Tabellen möchte ich in einer Übergeordneten Tabelle speichern. Gleiche Werte sollen natürlich rausfliegen.

    Angefangen bin ich so:
    SELECT Tab1.LieferantenId,
    Tab1.LieferantenOrt
    INTO Temp1
    FROM Tab1
    GROUP BY Tab1.LieferantenId,
    Tab1.LieferantenOrt;

    Das funktioniert dann auch wunderbar. Aber wie bekomme ich nun die zweite Tabelle mit in die erste?

    Vielen Dank für jede Hilfe.
     
  2. ukulele

    ukulele Datenbank-Guru

    Genauso. Das Problem wird sein das du nicht so einfach auf identische Einträge Filtern kannst innerhalb des SELECTs. Vor diesem Problem stand ich auch schon. Es ging dann nur mit einer Schleife die die Datensätze nach einander durch geht und vorher prüft, ob der Datensatz schon vorhanden ist. (Falls du doch eine Lösung findest her damit :) )

    Hilfreich wäre es vieleicht, erstmal eine Sicht auf alle Tabellen zu machen die per DISTINCT doppelte Einträge aus lässt. Diese könnte man dann für den Import nutzen. Oder probier dashier mal:
    Code:
    SELECT    DISTINCT *
    INTO Temp1
    FROM    (    SELECT    Tab1.LieferantenId AS LieferantenId,
                        Tab1.LieferantenOrt AS LieferantenOrt
                FROM    Tab1
                UNION ALL
                SELECT    Tab2.LieferantenId AS LieferantenId,
                        Tab2.LieferantenOrt AS LieferantenOrt
                FROM    Tab2
                UNION ALL
                SELECT    Tab3.LieferantenId AS LieferantenId,
                        Tab3.LieferantenOrt AS LieferantenOrt
                FROM    Tab3 ) tabelle
    GROUP BY LieferantenId,LieferantenOrt
    Der Mittelteil mit den UNION ALL wäre quasi deine Sicht.
     
  3. Ritschi

    Ritschi Aktiver Benutzer

    Hi,
    Die erste Tabelle ist also in Temp1, die anderen Tabellen mit der Temp1 vergleichen geht über einen INNER JOIN, die IDs, die noch nicht drin sind, haben in der Abfrage dann ein NULL.
    Code:
    SELECT    DISTINCT
            Tab1.LieferantenId AS LieferantenId
           ,Tab1.LieferantenOrt AS LieferantenOrt
        INTO
            Temp1
        FROM
            Tab1
    INSERT Temp1
            (
             LieferantenId
            ,LieferantenOrt
            )
            SELECT
                    Tab2.LieferantenId AS LieferantenId
                   ,Tab2.LieferantenOrt AS LieferantenOrt
                FROM
                    Tab2
                INNER JOIN Temp1
                    ON Tab2.LieferantenId = Temp1.LieferantenId
                    AND Tab2.LieferantenOrt = Temp1.LieferantenOrt
                WHERE
                    Temp1.LieferantenId IS NULL
    INSERT Temp1
            (
             LieferantenId
            ,LieferantenOrt
            )
            SELECT
                    Tab3.LieferantenId AS LieferantenId
                   ,Tab3.LieferantenOrt AS LieferantenOrt
                FROM
                    Tab3
                INNER JOIN Temp1
                    ON Tab3.LieferantenId = Temp1.LieferantenId
                    AND Tab3.LieferantenOrt = Temp1.LieferantenOrt
                WHERE
                    Temp1.LieferantenId IS NULL
    
     
Die Seite wird geladen...

Diese Seite empfehlen