关于Sybase SQL中的tsql:* =

关于Sybase SQL中的tsql:* =

*= in Sybase SQL

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

1
SELECT * FROM a, b WHERE a.id *= b.id

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

1
SELECT * FROM a, b WHERE a.id = b.id

从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

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

1
*= IS LEFT JOIN AND =* IS RIGHT JOIN.

(反之亦然,由于我不再使用它,因此我一直忘记,并且Google搜索* =时没有帮助)


当然,您应该这样写:

1
2
3
SELECT *
FROM a
LEFT JOIN b ON b.id=a.id

a,b语法很邪恶。


ANSI-82语法

1
2
3
4
5
6
7
8
SELECT
    *
FROM
    a
  , b

WHERE
     a.id *= b.id

ANSI-92

1
2
3
4
5
6
SELECT
    *
FROM
   a
  LEFT OUTER JOIN b
      ON a.id = b.id

1
SELECT * FROM a, b WHERE a.id = b.id

要求其中b.id = a.id存在一行,以便返回答案

1
SELECT * FROM a, b WHERE a.id *= b.id

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


推荐阅读