* = в Sybase SQL

Я поддерживаю некоторый код, который использует *= оператор в запросе к базе данных Sybase и я не могу найти документацию на него. Кто-нибудь знает, что *= ли? Я предполагаю, что это своего рода соединение.

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

Я не могу понять, чем это отличается от:

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

5 ответов


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

внутренняя и внешняя таблицы

термины внешняя таблица и внутренняя таблица описывают размещение таблиц во внешнем соединении:

  • в левом соединении внешняя таблица и внутренняя таблица являются левой и правой таблицами соответственно. Внешняя таблица и внутренняя таблица также Названы строк-сохранять и таблицы с нулевым значением, соответственно.

  • в правом соединении внешняя таблица и внутренняя таблица являются правой и левой таблицами соответственно.

например, в приведенных ниже запросах T1-внешняя таблица, а T2-внутренняя таблица:

  • T1 слева присоединиться T2
  • T2 правое соединение T1

или, используя синтаксис Transact-SQL:

  • T1 * = T2
  • T2 = * T1

это означает внешнее соединение, простое = означает внутреннее соединение.

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

(или наоборот, я продолжаю забывать, так как я больше не использую его, и Google не помогает при поиске *=)


конечно, вы должны написать так:

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

синтаксис a,b-это зло.


синтаксис ANSI-82

select 
    * 
from 
    a
  , b 

where 
     a.id *= b.id

в ANSI-92

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

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

требует, чтобы строка существовала там, где b.id = a.id для того, чтобы вернуть ответ

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

заполнит столбцы из b нулями, когда в b не было строки, где b.id = a.id.