(あなたはサブクエリを使用しない限り)、構文の順序が、それはまた、実行の順序です(予告の選択は、操作のために、その端に近いとしてリストされていない
いくつ
- FROMを、参加、しかし、最初は構文的に!)
- 複数のテーブルが関わっているときにエイリアス/完全に修飾すると、どのフィールドがどのテーブルから来るのかが分かります。
- 操作の順序がSQLからのJOINS 1stを実行しているため、selectで何を行うのかはまだコンパイラーにとって有効ではありません(これはまだ有効ではありません)。どこでグループ化するか、グループ化することもできます。
- Select *が好きではありませんが、本当に必要な列がわからないので、ここで使用しました。
- ジョインの前のどこまで。ほとんどのSQLコンパイラはコストベースの最適化を使用して、データテーブルとそれに関係しないものを考慮して最適な実行計画を見つけ出します。したがって、左の結合の左のテーブルを制限しているので、この場合はどこに制限基準を置いてください。左結合の右表のデータを制限する必要がある場合は、結合基準に制限を設定します。したがって、それが結合するときにフィルタリングすることが可能になる。
- は、おそらく私がスペースを排除するためにトリムを使用(またはIDBと同じタイプに)整数としてIDAをキャストする必要がありますが、他の非表示文字がある場合は、左の問題参加マッチング)
を持っていると思います
。
SELECT guild.*, own.*
FROM dbA.TableA guid
LEFT JOIN dbB.TableB own
on cast(trim(replace(guid.idA, ':XYZ', '')) as int) = own.idB
WHERE guid.event like '%2015'
それとも
SELECT *
FROM (SELECT cast(trim(replace(guid.idA, ':XYZ', '')) as int) as idA
FROM dbA.TableA guid
WHERE guid.event like '%2015') B
LEFT JOIN dbB.TableB own
on B.IDA = own.idB
あなたは上の置き換えたい参加する前に、その変形状態でIDAので、サブクエリを使用して最初の変換を実体(の)(のような代数の問題をアウト内部で処理GET)結合の前に置換された値が存在するように、結合またはサブクエリを使用する必要があります。 – xQbert