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.
答案 0 :(得分:-1)
关键是AND的区别 [orders]。[deptid] = 2和WHERE [订单]。[deptid] = 2,关闭 当然会导致2种不同 结果集。
两者都将返回相同的结果集。 可能会有一些性能差异,但我不这么认为。作为现代数据库,更好地优化查询。