是否可以在 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 有几个订单,而第二个客户没有。仅包含联接的数据示例 (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 行的 deptid 为 2。