2008-09-02 8 views
9

Ich führe einen Code, der einen * = Operator in einer Abfrage zu einer Sybase-Datenbank verwendet, und ich kann keine Dokumentation darüber finden. Weiß jemand was * = tut? Ich nehme an, dass es sich um eine Art Join handelt.* = in Sybase SQL

select * from a, b where a.id *= b.id

Ich kann nicht herausfinden, wie dies aus anders:

select * from a, b where a.id = b.id
+0

Bitte Pflege halten. Es ist heutzutage veraltet und benötigt eine explizite Aktivierung bei der Datenbankkonfiguration. – frlan

Antwort

12

Von http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc34982_1500/html/mig_gde/mig_gde160.htm:

Innere und Außentische

die Begriffe äußeren Tabelle und innere Tabelle beschreiben die Anordnung der Tabellen in einer äußeren Verknüpfung:

  • In einer linken Verknüpfung sind die äußere Tabelle und die innere Tabelle die linken bzw. rechten Tabellen. Die äußere Tabelle und die innere Tabelle werden auch als die Zeilen erhaltenden bzw. die Null liefernden Tabellen bezeichnet.

  • In einem rechten Join sind die äußere Tabelle und die innere Tabelle die rechten bzw. linken Tabellen.

beispielsweise in den Abfragen unten, ist T1 die äußere Tisch und T2 ist der innere Tisch:

  • T1 links T2 verbinden
  • T2 rechts T1 verbinden

Oder mithilfe der Transact-SQL-Syntax:

  • T1 * = T2
  • T2 = * T1
+1

wow, danke sybase für diesen Sound kompliziert und verwirrend. –

+0

Es scheint, dass Link, den du zur Verfügung gestellt hast, über verschiedene Dinge sagt. – Trismegistos

9

Es bedeutet äußere Verknüpfung ist eine einfache = bedeutet innere Verknüpfung.

*= is LEFT JOIN and =* is RIGHT JOIN. 

(oder umgekehrt, ich vergesse immer wieder, da ich verwende es nicht mehr, und Google ist nicht hilfreich, wenn für * = Suche)

+0

diese Antwort ist richtig. –

6

Natürlich Sie sollte es auf diese Weise schreiben:

SELECT * 
FROM a 
LEFT JOIN b ON b.id=a.id 

Die a, b Syntax ist böse.

+0

Ich weiß nicht über das Böse, aber es ist sicherlich proprietär zu Sybase und Microsoft SQL Server, und nicht von anderen Marken der Datenbank unterstützt. –

0
select * from a, b where a.id = b.id

Setzt voraus, dass eine Reihe existiert in denen b.id = a.id, um eine Antwort

select * from a, b where a.id *= b.id

füllen die Spalten von b mit NULL-Werten zurück, wenn es nicht eine Reihe war in b wobei b.id = a.id.

5

ANSI-82-Syntax

select 
    * 
from 
    a 
    , b 

where 
    a.id *= b.id 

ANSI-92

select 
    * 
from 
    a 
    left outer join b 
     on a.id = b.id 
+0

Ich denke, Sie meinen SQL-89 und SQL-92, nicht ANSI-82 und ANSI-92. –