Возможно ли в 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
, что, конечно же, приведет к двум различным наборам результатов.
Это что-то, что я могу сделать с SubSonic вообще или запрос SubSonic, который я сделал, неправильный?
Спасибо за любую помощь !!
Редактировать: Например, у меня 2 клиента, у 1 есть несколько заказов, а у второго нет. Пример данных только с соединением (SELECT customerid, orderid, deptid FROM [customer] LEFT OUTER JOIN [orders] ON [customer]. [Customerid] = [orders]. [Customerid]) вернет это:
Строка A: Customerid 1, Orderid 1, Deptid 2
строка B: индекс 0, код 2, элемент 1
строка C: значение 0, значение NULL, значение NULL
SQL с оператором AND вернет строки A и C. Я полагаю, это потому, что AND вычисляется в процессе объединения.
SQL с оператором WHERE будет возвращать только строку A, потому что WHERE вычисляется после объединения, а затем только строка A имеет Deptid 2.