Вопрос
Я поддерживаю некоторый код, который использует оператор *= в запросе к базе данных Sybase, и я не могу найти документацию по нему.Кто-нибудь знает, что делает *=?Я предполагаю, что это своего рода объединение.
select * from a, b where a.id *= b.id
Я не могу понять, чем это отличается от:
select * from a, b where a.id = b.id
Решение
Внутренние и внешние таблицы
Термины "внешняя таблица" и "внутренняя таблица" описывают размещение таблиц во внешнем соединении:
При соединении по левому краю внешняя таблица и внутренняя таблица являются левой и правой таблицами соответственно.Внешняя таблица и внутренняя таблица также называются таблицами, сохраняющими строки, и таблицами, предоставляющими нуль, соответственно.
При правостороннем соединении внешняя таблица и внутренняя таблица являются правой и левой таблицами соответственно.
Например, в приведенных ниже запросах 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.