TABLE_A: columns id, colA1, colA2, ...
TABLE_B: columns id, colB1, colB2, ...
QUERY1: SELECT *
FROM TABLE_A, TABLE_B
WHERE TABLE_A.id = TABLE_B.id
-- This works perfectly
QUERY2: SELECT *
INTO #tempT
FROM TABLE_A, TABLE_B
WHERE TABLE_A.id = TABLE_B.id
-- This fails because A.id and B.id have same column name in SELECT
-- ERROR: Column names in each table must be unique.
Ein offensichtlicher Weg, um das Problem mit Abfrage # 2 der Befestigung ist es, alle Nicht-ID-Spalten von Table_B explizit auszuwählen:gleichen Namen Spalten in einem Join Vermeiden Auswahl
QUERY3: SELECT TABLE_A.*, TABLE_B.colB1, TABLE_B.colB2, ...
Das Problem mit diesem Ansatz ein allgemeines Problem mit Hartcodierung genaue Liste der Spalten in eine SELECT-Abfrage ist 2-fach, und ist wirklich:
Hartcodierung der Spalten den Code spröde gegen Tabellen macht, die später mehr Spalten hinzugefügt haben. Jedes Mal, wenn Sie TABLE_B eine Spalte hinzufügen, müssen Sie den Code mit der angegebenen Abfrage ändern, erneut testen und erneut freigeben.
Wenn es eine Menge von Spalten in einer Tabelle ist, sieht die Abfrage schrecklich und ist schwer durch zu lange SELECT-Anweisung
Gibt es eine Sybase SQL spezifische Lösung für mein Problem zu lesen mit Abfrage # 2, die das Problem mit Abfrage # 3 vermeidet?
Ich bin auf der Suche nach einer Lösung mit Sybase SQL. NICHT anwendbar: Lösungen, bei denen der Anwendungscode verwendet wird, um die Tabellenstruktur zu lesen und die obige Abfrage 3 zu konstruieren. Auch Lösungen mit eval
in-Sybase.
Mit Standard-SQL würde ein expliziter Join das tun 'von table_a Join table_b mit (id) '. Das wird die "id" -Spalte (oder genauer die Join-Spalten) nur einmal im Ergebnis haben. Aber im Allgemeinen ist die Verwendung von 'select *' im Produktionscode eine wirklich schlechte Idee. –
@a_horse_with_no_name - Ich wusste, dass ich eines Tages beschämt werden würde, wenn ich die ANSI-Syntax nicht gut kenne. Kümmern Sie sich bitte um eine Antwort? – DVK
@a_horse_with_no_name - schauen wir uns das "USING" -Konstrukt tatsächlich in Sybase ASE an? Ich weiß, dass es in Oracle funktioniert, aber Sybase scheint es nicht zu unterstützen. – DVK