SubSonicでこのようなクエリを作成することは可能ですか?
SELECT * FROM [customer]
LEFT OUTER JOIN [orders] ON [customer].[customerid] = [orders].[customerid]
AND [orders].[deptid] = 2
私は次のSubSonic(2.1)コードでこれを試しました:
SqlQuery q = DB.Select().From<Customer>()
.LeftOuterJoin(orders.customerid, customer.customerid)
.AndExpression(orders.deptid).IsEqualTo(2);
SQLプロファイラーで生成されたクエリを見ると、次のようになっています。
SELECT * FROM [customer]
LEFT OUTER JOIN [orders] ON [customer].[customerid] = [orders].[customerid]
WHERE [orders].[deptid] = 2
重要なのはとの違いですAND [orders].[deptid] = 2
。WHERE [orders].[deptid] = 2
これはもちろん、2つの異なる結果セットになります。
これは私がSubSonicでできることですか、それとも私が作成したSubSonicクエリが正しくありませんか?
助けてくれてありがとう!
編集:たとえば、私には2人の顧客がいて、1人には複数の注文があり、2番目の顧客には何もありません。結合のみのデータの例(SELECT customerid、orderid、deptid FROM [customer] LEFT OUTER JOIN [orders]ON[customer]。[customerid]=[orders]。[customerid])はこれを返します:
行A:customerid 1、orderid 1、deptid 2
行B:customerid 1、orderid 2、deptid 1
行C:customerid 2、orderid NULL、deptid NULL
ANDステートメントを含むSQLは、行AとCを返します。これは、ANDが結合プロセス中に評価されるためだと思います。
WHEREステートメントを使用したSQLは、行Aのみを返します。これは、WHEREが結合後に評価され、行Aのみがdeptid2を持つためです。