2016-12-07 2 views
0

Ich habe ein Problem. Ich benutze Sybase an meiner Schule, und wenn ich mein Projekt mache, sehe ich ein paar Probleme. Ich habe gelernt, dass join ohne on Klausel sollte funktionieren wie cross join (kartesische Produkt). Aber wenn ich mache join zwischen zwei Tabellen, A und B zum Beispiel.Sybase - Join funktioniert nicht richtig

Select * from A join B 

funktioniert genauso wie A join B on A.Key=B.key. Ich muss Cross-Join verwenden, um Cartesian zu haben.

Und ich habe eine andere Frage: Ich sollte ohne Beziehungen zu join Tabellen können und kartesisches Produkt von ihnen bekommen, sondern sehe ich „gibt es keine Möglichkeit zu join Tabelle X-Y“.

+1

Willkommen bei SO, bitte nehmen Sie sich einen Moment Zeit um zu lesen [Wie stelle ich eine gute Frage] ( – Derek

+0

) 'Select * from A join B' ist ungültiges SQL und wird überhaupt nicht ausgeführt. –

+0

Können Sie mir sagen, warum? Es funktioniert einfach bei anderen Systemen. – PGR

Antwort

0

Anscheinend auf dem Sybase-System, das Sie verwenden, join ohne on bedeutet eine "natürliche Join": eine, die eine Verknüpfung basierend auf Spalten mit dem gleichen Namen (oder vielleicht nach Fremdschlüssel Deklarationen) impliziert.

ich gelernt, dass beitreten, ohne auf Klausel funktionieren soll wie Quer

In den frühen Tagen kommen, hatte SQL keine Stichwort beitreten. Ihre Abfrage wäre als Select * from A, B ausgedrückt worden. Das ergab ein kartesisches Produkt. Aus einer relationalen Perspektive wurde dieses Produkt mit einem relationalen select (restrict) Operator unter Verwendung von where verwoben.

+0

Ok, das habe ich bemerkt. Wenn ich eine Abfrage benutze, die Sie 'Select * von A, B' beschrieben haben, habe ich ein kartesisches Produkt, aber wenn ich Join ohne On-Klausel verwende, habe ich dieselben Ergebnisse wie mit on-Klausel, aber wenn ich mehr als habe eine Spalte passend ich sehe Warnung "es gibt mehr als eine Möglichkeit zu verbinden" Ich schätze, dass Sybase nur schlau ist, weil ich dieses Problem auf anderen System überprüft habe, und Join ohne on-Klausel gab mir Cartesian. Danke für die Hilfe, ich werde meinen SQL-Code schreiben, wie es mit jeder notwendigen Klausel getan werden sollte, ich denke, es ist eine schlechte Idee, das System es für Sie tun zu lassen, es kann irreführend sein. – PGR