テーブルが2つあります(私のものではありません)。問題は左テーブルの列が時には数字であり、時には文字列であることです。右側の表の列は常に数値です。左の列を変換できない場合はSQLエラーが発生します。sqlは、左の列に数値を指定できる場合にのみ結合します。
できるだけいつでも列に参加できますか?
テーブルが2つあります(私のものではありません)。問題は左テーブルの列が時には数字であり、時には文字列であることです。右側の表の列は常に数値です。左の列を変換できない場合はSQLエラーが発生します。sqlは、左の列に数値を指定できる場合にのみ結合します。
できるだけいつでも列に参加できますか?
変更エンジンは暗黙的に聞かせてはいけない代わりに、int型の文字列(Aのデータ型)(Bのデータ型)
SELECT a.*, B.*
FROM A
LEFT JOIN B
-- on B.AID=A.ID --Instead of B.AID= A.ID
on A.ID = B.AID
にキャストしようとするので、値が最初にリストされているように、句上の順序エンジンは暗黙のキャストを行い、強制的に文字列にB値...文字列へ
鋳造番号...
SELECT a.*, B.*
FROM A
LEFT JOIN B
on trim(A.ID) = cast(B.AID as varchar(100))
または
012をキャストは、Aが数値であり、残りのAの中の共用体でない場合にのみ結合します。注:以下の結合の代わりにBからの値を綴る必要があるかもしれません。
SELECT a.*, B.*
FROM (SELECT * from A where isNumeric(ID)) A
LEFT JOIN B
on A.ID = cast(B.AID as varchar(100))
UNION
SELECT A.*, B.*
FROM A
LEFT JOIN (SELECT * From B where 1 =0)
WHERE not isNumeric(ID)
私は結合で重要な順序を認識していなかったし、on節でキャストすることもできなかった。非常に有益な、ありがとう。 –
私が知る限り、エンジンは常に、データ型が異なるときに最初に遭遇したデータ型(式の左側にあるもの)にキャストしようとします。 – xQbert
1)数値を文字列にキャストして比較します。 2)サブクエリを作成して数値である値を返し、それ以外の値では結合を行います。 – xQbert