1

我目前有一个 MultiCriteria 查询,它根据子查询中的 id 过滤结果

Subqueries.PropertyIn("Id", detachedCriteria)

对于多条件查询中使用的所有查询,子查询都是相同的。

看着重复子查询的 sql 似乎有点难看,在我目前的情况下是 15 次。

单独查询的原因是每个查询都有不同的连接,并且不想要一个大规模的笛卡尔连接。

如果我手动编写 sql,我会将重复的子查询提取到公共表表达式中

WITH XYZ AS
{
    ....
}

然后子查询将是 15 个查询中 XYZ 中的 where id。

这有点特定于 sql server,替代方法是临时表或其他数据库特定功能。

关于如何改进查询的任何想法,或者我是否坚持重复的子查询?

4

1 回答 1

1

好吧,如果您要返回多个结果集,那么 usingWITH无论如何都不会帮助您,因为它只能应用于单个SELECT语句。

无论如何,为了使数据层代码与数据库无关,我可能会将实际的查询逻辑放入存储过程中。这意味着您可以使用特定于引擎的功能进城,因为它们都隐藏在公共界面后面。是的,您必须为您支持的每个数据库引擎(通常很少)重新实现查询,但是您可以完全控制在每个引擎上运行的内容,并且您的数据访问代码将变得更加简洁.

于 2010-11-15T02:41:41.823 回答