*= in Sybase SQL

10

我正在维护一些代码,其中在对Sybase数据库查询时使用了*=运算符,但我找不到相关文档。有人知道*=的作用吗?我猜它是某种连接操作。

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

我无法弄清楚这与以下内容有何不同:
select * from a, b where a.id = b.id

请注意,这个现在已经被弃用了,并且需要在数据库配置中进行显式激活。 - frlan
5个回答

15

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

内部表和外部表

“外部表”和“内部表”这两个术语用于描述外连接中的表格放置:

  • 在左连接中,“外部表”和“内部表”分别是左表和右表。也可以把“外部表”和“内部表”分别称为保留行和提供空值表。

  • 在右连接中,“外部表”和“内部表”分别是右表和左表。

例如,在下面的查询中,T1是外部表,T2是内部表:

  • T1 left join T2
  • T2 right join T1

或者,使用Transact-SQL语法:

  • T1 *= T2
  • T2 =* T1

1
哇,感谢Sybase使这听起来复杂和混乱。 - Eric Johnson
您提供的链接似乎涉及不同的事情。 - Trismegistos

9
这句话的意思是,= 符号表示内连接,而 outer join 表示外连接。
*= is LEFT JOIN and =* is RIGHT JOIN.

(或反之亦然,我经常忘记因为我不再使用它,而且当我搜索 *= 时,Google 并没有提供有用的信息。)
(或相反,我经常忘记,因为我不再使用它,当我搜索 *= 时,谷歌并不好使。)

6
当然,你应该这样编写:

当然,你应该这样编写:

SELECT *
FROM a
LEFT JOIN b ON b.id=a.id
语法是有问题的。

我不知道它是否邪恶,但它肯定是Sybase和Microsoft SQL Server专有的,并且不受其他品牌数据库的支持。 - Bill Karwin

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

我认为你指的是SQL-89和SQL-92,而不是ANSI-82和ANSI-92。 - Bill Karwin

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 的记录,那么将使用 null 值填充 b 表的列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接