Zwei Tabellen zu einer verbinden

Guten Morgen zusammen =)

Ich versuche schon ne ganze Weile vergeblich zwei Tabellen sinnvoll miteinander zu verbinden. Folgende Situation:

Es geht um eine Produktetabelle, welche zur Zeit im MS-Access Format vorhanden ist. Stand jetzt ist, dass es eine deutsche und eine französische Tabelle gibt. Die Felder sind im Prinzip dieselben. Es hat zudem in beiden Tabellen ein Feld „ProductID“.

Die Situation ist nun so, dass einige Produkte nur in der deutschen Tabelle vorhanden sind, einige nur in der französischen und einige in beiden. Nun sollte ich die beiden Tabellen auf MS-SQL 2000 in einer Tabelle zusammenführen. Ich habe mir folgendes Tabellenlayout vorgestellt (vereinfacht):

[ID] - [Title_DE] - [Title_FR] - [Description_DE] - [Description_FR]

Nun müssten alle Einträge aus der deutschen Tabelle, welche nicht in der französischen Tabelle vorkommen übernommen werden, die Felder mit _FR würden dabei NULL erhalten.
Umgekehrt würden alle französischen Einträge, welche nicht in der deutschen Tabelle vorkommen in der neuen Tabelle eingefügt, jedoch die Felder mit _DE würden dabei NULL erhalten.
Die Einträge, bei denen in den beiden Tabellen die ID übereinstimmt, würden dann komplett ausgefüllt.

Ich sehe echt keine Möglichkeit wie ich dies sinnvoll machen kann… :frowning:
Ich habe nun aber die Tabellen schon von Access in Temp-Tables auf dem SQL-2000 importiert und könnte von daher eine Abfrage laufen lassen…

Kann mir da jemand weiterhelfen. Bitte falls möglich nicht nur den Code hinschreiben, sondern auch eine kurze Erklärung dazu, da ich ja auch etwas davon lernen will… :smile:

Besten Dank & viele Grüsse aus der verregneten Schweiz
Chris

Nun habe ich - endlich - die Lösung gefunden. Lustigerweise brachte mein Kollege mich bei einem Nebenbeigespräch während einer Zigarette auf die Idee =)

Falls jemand mal ein ähnliches Problem wie ich hat, hier der Code:

INSERT INTO IMPORT\_Books

SELECT \* FROM (

 -- Einträge in beiden Tabellen
 SELECT A.BookTitle AS 'BookTitle\_DE',
 B.BookName AS 'BookTitle\_FR',
 A.ProductID AS 'TEMP\_ProductID'
 
 FROM BOOKS\_D A
 
 INNER JOIN BOOKS\_F B
 ON A.ProductID = B.ProductID
 
 UNION ALL
 
 -- Einträge nur in DE Tabelle
 SELECT A.BookTitle AS 'BookTitle\_DE',
 NULL AS 'BookTitle\_FR',
 A.ProductID AS 'TEMP\_ProductID'
 
 FROM BOOKS\_D A
 
 WHERE A.ProductID NOT IN (SELECT ProductID FROM BOOKS\_F)
 
 UNION ALL
 
 -- Einträge nur in FR Tabelle
 SELECT NULL AS 'BookTitle\_DE',
 A.BookName AS 'BookTitle\_FR',
 A.ProductID AS 'TEMP\_ProductID'
 
 FROM BOOKS\_F A
 
 WHERE A.ProductID NOT IN (SELECT ProductID FROM BOOKS\_D)
) A

Viele Grüsse
Chris

oder einfach:

full outer JOIN BOOKS_F B
ON A.ProductID = B.ProductID

Jens

Hmmm… DAS war jetzt nicht nett =)

Wenigstens hab’ ich es hingekriegt :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]