0

是否可以在 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] = 2WHERE [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。

4

1 回答 1

-1

关键是 AND [orders].[deptid] = 2 和 WHERE [orders].[deptid] = 2 的区别,这当然会导致 2 个不同的结果集。

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

于 2009-04-22T10:29:58.830 回答