Sprache: T-SQL
Server: SQL Server 2008 R2 - SQL Server 2014SQL - Abfrage mehrere Dissimilar Tabellen (nicht UNION)
Ich habe, was auf Basis hier ein an anderer Stelle suchen, erscheint entweder ein einzigartiges Problem zu sein oder ich kann nicht richtig verbalisieren, was ich zu erreichen versuche. Ich würde gerne über mehrere ungleiche Tabellen mit unterschiedlichen Feldstrukturen abfragen und sie zu einer einzigen anderen Tabelle verbinden. Wir haben eine Tabelle der ASSETS tb_assets
und eine Tabelle der LIZENZEN tb_licenses
. Ich würde gerne über diese beiden Fragen und JOIN sie in die Tabelle der VENDORS tb_vendors
.
So:
---------------------- ---------------------------
| TB_ASSETS | | TB_LICENSES |
---------------------- ---------------------------
| f_assetvendor | <~~~ ~~~> | f_licensevendor |
| f_assettag | | | | f_licensename |
| f_assetname | | | | f_licenseexpirationdate |
| | | | | f_licensequantity |
---------------------- | | ---------------------------
| |
~~~~~~~~ ~~~~~~~~~~
| ---------------------- |
| | TB_VENDORS | |
| ---------------------- |
~~> | f_vendorGUID | <~~
| f_vendorname |
----------------------
Für ein kurzes Beispiel, ich für einen Herstellernamen (f_vendorname
) von Amazon suchen will, würde Ich mag gegen tb_assets
als auch die Abfrage gegenüber tb_licenses
. Die Abfrage habe ich unten mit Invalid column name 'f_assetvendor'
Fehler versucht, damit ich etwas falsch mache.
SELECT
f_assetvendor AS 'AssetVendor', f_licensevendor as 'LicenseVendor'
FROM
tb_assets, tb_licenses
LEFT JOIN
tb_vendors assven ON assven.f_vendorGUID = f_assetvendor
LEFT JOIN
tb_vendors licven ON licven.f_vendorGUID = f_licensevendor
WHERE
f_vendorname LIKE '%Amazon%'
In Bezug auf meinen Titel „nicht UNION“ besagt, ich keine UNION hier, weil mit UNION Spaltennamen für die Ergebnismenge aus der ersten Abfrage getroffen werden kann, müssen die Spalten die gleichen Datentypen haben, und beide Tabellen müssen die gleiche Anzahl von Spalten haben.
[Schlechte Gewohnheiten zu treten: mit altem Stil JOIN] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - diese alte * durch Kommas getrennte Liste von Tabellen * style wurde durch die * richtige * ANSI 'JOIN'-Syntax im ANSI - ** 92 ** SQL Standard ersetzt (** mehr als 20 Jahre **) und deren Verwendung wird abgeraten. Und du solltest ** definitiv NICHT die beiden Stile mischen! Bleib am richtigen ANSI JOIN - immer. –
@marc_s, Ich kann die beiden oberen Tabellen nicht zusammen verbinden, da sie keine Spalten haben, auf denen sie sich miteinander verbinden können. – Beems
@Beems Sie können CROSS – JamieD77