23

我有一个从 ms sql 2000 中提取并插入 MySql 查询的查询。它不起作用,MySql 会在 *= 运算符上窒息。在此示例中,我有两个名为 person_name 的 varchar 列。

SELECT * FROM tbl1 a, tbl2 b 
WHERE a.id = b.id
AND a.person_name *= b.person_name

我知道在其他语言中 myInt *= myTotal 也可以读作 myInt * myInt = myTotal。但是,我正在使用包含所有字符而不是整数的 varchars。我这样写出来:

AND a.person_name * a.person_name = b.person_name

瞧!它似乎奏效了。有人可以解释发生了什么吗?*= 运算符是将字符转换为其整数等价物还是?为什么我在网络上的任何地方都找不到这个运算符?

4

2 回答 2

23

在 SQL 2000 中,这被用作 LEFT OUTER JOIN

=* 是一个右外连接

您的查询可能是:

SELECT 
  * 
FROM 
  tbl1 a LEFT OUTER JOIN tbl2 b ON a.person_name = b.person_name
WHERE 
  a.id = b.id

如此处所述:

使用非标准的产品特定语法和 WHERE 子句指定外连接。*= 运算符用于指定左外连接,=* 运算符用于指定右外连接。

于 2011-06-07T18:25:59.873 回答
4

在 MSSQL 中,WHERE 子句中的 *= 约定表示连接。因此,您真正看到的是 person_name 上 tbl1 和 tbl2 之间的 LEFT OUTER JOIN,其中将返回 tbl1 中的所有值和 tbl2 上的匹配值。

于 2011-06-07T18:28:16.270 回答