SQL-Abfrage

sqler

Benutzer
Beiträge
12
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.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
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.
 
Werbung:

Ritschi

Aktiver Benutzer
Beiträge
41
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
 
Oben