Doppelte Datensätze entfernen, aber nicht anhand alle Spalten
Hallo,
folgende Problematik:
Ich benötige auf einem MS SQL 2005 ein View das die Datensätze aus 2 verschiedenen Tabellen zusammenführt. Hierbei kann es aber vorkommen das identische Datensätze in den Tabellen vorhanden sind. Soweit so gut, kann man ja mit UNION machen.
Aber die Datensätze beinhalten leider Spalten vom Typ TEXT die nicht vergleichbar sind, zudem sind die Datensätze teilweise nicht 100% gleich, so das sie nicht gefiltert würden.
Ich möchte nun im Prinzip Spalte1, Spalte2, Spalte3 und Spalte4 haben, aber der vergleich auf doppelte Datensätze soll nur anhand von Spalte1 und Spalte2 gemacht werden.
Ist das überhaupt möglich? Ich hab es bisher nur mit einer temporären Tabelle hinbenkommen, wo ich Tabelle1 und Tabelle2 per UNION zusammenführe aber nur Spalte1 und Spalte2 selecte und das ergebnis in eine temptabelle packe.
Diese benutze ich dann wiederum um mir anschließen per join die anderen benötigten Spalten aus den 2 Tabellen zu holen. Nur kann ich ja keine temptabellen in einem view benutzen.
Jemand noch eine Idee wie ich das bewerkstelligen könnte?
Gruß
Budda
folgende Problematik:
Ich benötige auf einem MS SQL 2005 ein View das die Datensätze aus 2 verschiedenen Tabellen zusammenführt. Hierbei kann es aber vorkommen das identische Datensätze in den Tabellen vorhanden sind. Soweit so gut, kann man ja mit UNION machen.
Aber die Datensätze beinhalten leider Spalten vom Typ TEXT die nicht vergleichbar sind, zudem sind die Datensätze teilweise nicht 100% gleich, so das sie nicht gefiltert würden.
Ich möchte nun im Prinzip Spalte1, Spalte2, Spalte3 und Spalte4 haben, aber der vergleich auf doppelte Datensätze soll nur anhand von Spalte1 und Spalte2 gemacht werden.
Ist das überhaupt möglich? Ich hab es bisher nur mit einer temporären Tabelle hinbenkommen, wo ich Tabelle1 und Tabelle2 per UNION zusammenführe aber nur Spalte1 und Spalte2 selecte und das ergebnis in eine temptabelle packe.
Diese benutze ich dann wiederum um mir anschließen per join die anderen benötigten Spalten aus den 2 Tabellen zu holen. Nur kann ich ja keine temptabellen in einem view benutzen.
Jemand noch eine Idee wie ich das bewerkstelligen könnte?
Gruß
Budda
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 107635
Url: https://administrator.de/contentid/107635
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
leg Dir doch in jeder SELECT Anweisung der UNION Abfrage 2 zusätzliche Felder mit Kopien der Spalte1 und Spalte2 an, dabei manipulierst du deren Inhalt so, dass du Ihn gruppieren könntest. (Großschreibung, Trimmen, auf 128 Zeichen kürzen, ...)
dann machst du um die UNION Abfrage einfach eine SELECT Anweisung und gruppierst nach den 2 neuen Spalten.
hoffe das Klappt so ..
dann machst du um die UNION Abfrage einfach eine SELECT Anweisung und gruppierst nach den 2 neuen Spalten.
hoffe das Klappt so ..
Hi Budda,
eine neue Tabelle aus zwei Tabellen erstellst du so:
Das sogenannte Qualifizieren, . . . tabelle1.spaltenname . . ., wäre notwendig, wenn die Spaltennamen
in Tabelle1 und Tabelle2 gleich sind.
Die Syntax zum Erstellen von Views unter MS kenne ich nicht, aber ich vermute mal, dass es gleich ist,
also **create view . . . usw. "
Gruß
Günni
eine neue Tabelle aus zwei Tabellen erstellst du so:
create neue_tabelle
select tabelle1.spaltenname1, tabelle1.spaltenname2 . . . usw., tabelle2.spaltenname1 . . . usw.
from tabelle1, tabelle2
where tabelle1.spaltenname1=tabelle2.spaltenname1
and tabelle1.spaltenname2=tabelle2.spaltenname2
Das sogenannte Qualifizieren, . . . tabelle1.spaltenname . . ., wäre notwendig, wenn die Spaltennamen
in Tabelle1 und Tabelle2 gleich sind.
Die Syntax zum Erstellen von Views unter MS kenne ich nicht, aber ich vermute mal, dass es gleich ist,
also **create view . . . usw. "
Gruß
Günni
Hallo Budda,
bringt alle Zeilen aus Tabelle1 und alle Zeilen aus Tabelle2, die nicht in Spalte1 und Spalte2 mit einer Zeile aus Tabelle1 übereinstimmen.
Gruß, Mad Max
select Spalte1, Spalte2, Spalte3, Spalte 4
from Tabelle1
union all
select Spalte1, Spalte2, Spalte3, Spalte 4
from Tabelle2 t2
where not exists (select * from Tabelle1 t1 where t1.Spalte1 = t2.Spalte1 and t1.Spalte2 = t2.Spalte2)
bringt alle Zeilen aus Tabelle1 und alle Zeilen aus Tabelle2, die nicht in Spalte1 und Spalte2 mit einer Zeile aus Tabelle1 übereinstimmen.
Gruß, Mad Max