*= 在 Sybase SQL 中

Posted

技术标签:

【中文标题】*= 在 Sybase SQL 中【英文标题】:*= in Sybase SQL 【发布时间】:2010-09-07 15:03:19 【问题描述】:

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

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

我不知道这与以下有何不同:

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

【问题讨论】:

请注意。它现在已被弃用,需要在数据库配置上显式激活。 【参考方案1】:

来自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

【讨论】:

哇,感谢 sybase 让这个声音变得复杂和令人困惑。 您提供的链接似乎涉及不同的内容。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

当然,你应该这样写:

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

a,b 语法是邪恶的。

【讨论】:

我不知道邪恶,但它肯定是 Sybase 和 Microsoft SQL Server 专有的,其他品牌的数据库不支持。【参考方案4】:

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。【参考方案5】:
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 中的列。

【讨论】:

以上是关于*= 在 Sybase SQL 中的主要内容,如果未能解决你的问题,请参考以下文章

在sybase11.5的sybase central中无法用sa用户登录;sql advantage中也无法登陆,同样提示错误。错误如下

通过批处理在 Sybase 中运行大量 SQL 脚本

sybase 如何像SQL SERVER一样建立作业,让他能定时运行存储过程

Sybase,将字符串作为sql查询执行

sybase存储过程中怎么调用存储过程

linux下安装完sybase数据库后,怎么连接呀,刚学sybase,还不会用