web-dev-qa-db-ja.com

SQL Server 2000のこのオペランド(* =スターが等しい)は何ですか?

Ms sql 2000から取得し、MySqlクエリにプラグインしたクエリがあります。それは機能しませんでした、MySqlは* =演算子で窒息しました。この例では、person_nameという2つのvarchar列があります。

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

他の言語では、myInt * = myTotalはmyInt * myInt = myTotalと読むこともできます。ただし、整数ではなくすべての文字を含むvarcharを使用しています。私はそれを次のように書きました:

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

出来上がり!うまくいったようです。誰かが何が起こっているのか説明できますか? * =演算子は、文字を同等の整数に変換していますか?そして、なぜこの演算子をWeb上のどこにも見つけられなかったのですか?

23
Blaise Swanwick

SQL 2000では、これはLEFT OUTERJOINとして使用されていました。

= *は右外部結合です

クエリは次のようになります。

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

述べたように ここ

非標準の製品固有の構文とWHERE句を使用して外部結合を指定します。 * =演算子は左外部結合を指定するために使用され、= *演算子は右外部結合を指定するために使用されます。

22
CristiC

MSSQLでは、WHERE句の* =規則は結合を示します。つまり、実際に表示されているのは、person_nameのtbl1とtbl2の間のLEFT OUTER JOINであり、tbl1のすべての値とtbl2の一致する値が返されます。

4
bsexton