10

我正在维护一些在对 Sybase 数据库的查询中使用 *= 运算符的代码,但我找不到关于它的文档。有谁知道 *= 是做什么的?我认为这是某种连接。

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

我无法弄清楚这与以下内容有何不同:

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

5 回答 5

14

来自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
于 2008-09-02T21:11:33.190 回答
9

它表示外连接,简单的 = 表示内连接。

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

(反之亦然,我一直忘记,因为我不再使用它了,而且谷歌在搜索 *= 时也没有帮助)

于 2008-09-02T21:07:30.687 回答
6

当然,你应该这样写:

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

a,b 语法是邪恶的。

于 2008-09-02T21:17:54.453 回答
5

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
于 2008-09-02T21:19:37.740 回答
1
select * from a, b where a.id = b.id

要求在 b.id = a.id 中存在一行才能返回答案

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

当 b 中没有 b.id = a.id 的行时,将用空值填充 b 中的列。

于 2008-09-02T21:18:47.557 回答