使用AndExpression进行外连接

时间:2009-04-22 10:09:45

标签: subsonic

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 profiler中查看已生成的查询时,它是:

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.

1 个答案:

答案 0 :(得分:-1)

  

关键是AND的区别   [orders]。[deptid] = 2和WHERE   [订单]。[deptid] = 2,关闭   当然会导致2种​​不同   结果集。

两者都将返回相同的结果集。 可能会有一些性能差异,但我不这么认为。作为现代数据库,更好地优化查询。