*= 在 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中也无法登陆,同样提示错误。错误如下