gpt4 book ai didi

Nhibernate:子查询上的左外连接

转载 作者:行者123 更新时间:2023-12-05 00:43:18 25 4
gpt4 key购买 nike

更新时间 2

这是我正在处理的两个查询(两个查询中都省略了分页)

我想得到以下查询

SELECT * 
FROM product
LEFT OUTER JOIN
(
SELECT *
FROM Cart
LEFT OUTER JOIN
cartproducts
ON Cart.Id = cartproducts.Cart_id
WHERE Cart.username = 'user'
)
AS CartFiltered
ON product.Id = CartFiltered.product_id

但我似乎总是得到
SELECT * 
FROM product
LEFT OUTER JOIN
cartproducts
ON product.Id = cartproducts.Product_id
LEFT OUTER JOIN
Cart
ON
cartproducts.cart_id = cart.id
WHERE Cart.username = 'user'

我如何设法创建第一种类型的查询?
我希望我的问题更清楚:) 缺乏清晰度有时是我的一大敌人:p

更新:

FWIW,我还没有找到答案,目前正在加载分页产品数据和整个购物车以显示正确的对象。
粗略的解决方案,但它有效并且它击败了我试图让 Criteria API 将我识别为它的主人的组合。如果有人能碰巧指出我正确的方向,我会非常感兴趣;)

你好,

我很难在 Criteria API 中编写以下查询,而且我真的不知道该怎么做:我希望有人可以提供帮助。

在数据库上,我有产品。这些产品可以在很多购物车中(每个用户一个购物车),每个购物车可以包含很多产品,所以我们有一个多对多的关系。
我想显示每个产品的列表,并在其旁边显示一个小图标,以通知用户该特定产品已在购物车中。我所做的是向 NHibernate 询问我的产品,并对由购物车所有者过滤的购物车进行左外连接。
Dim critPage As ICriteria = Session.CreateCriteria(GetType(Product)) _
.SetFirstResult(pageNumber * itemsPerPage).SetMaxResults(itemsPerPage) _
.CreateCriteria("Carts", "c", SqlCommand.JoinType.LeftOuterJoin) _
.SetProjection(plist) _
.SetResultTransformer(New TypedResultTransformer(Of ProductWithCartInfo)) _
.Add(Expression.Eq("c.User", username))

投影列表在这里是为了将列数减少到 ProductWithCartInfo 类感兴趣的内容。它只包含属性预测。

问题是,在这个查询中,购物车过滤应用于整个结果集,我没有看到用户购物车中的每个产品,而是用户购物车中的每个产品。

是否可以使用 Nhibernate 中的 Criteria API 对子查询进行左外连接?有关信息,如果可能,我想将其保留在 Criteria API 中。
谢谢

最佳答案

我不确定我是否完全关注您的问题,但这听起来与我遇到的问题非常相似。我似乎当你有 NHibernate 的嵌套(子)标准时,你会失去一些控制。我能够解决我的问题,但为我的表设置了别名,而不是使用嵌套的标准。

可能试试...

criteria.CreateAlias("Cart", "Cart", JoinType.LeftOuterJoin);

然后您在购物车上的过滤器必须是 OR 条件
ICriterion cartCriterion = Restrictions.Eq("Cart.User", username);
customerCriterion = Restrictions.Or(customerCriterion, Restrictions.IsNull("Cart.User"));
criteria.Add(customerCriterion);

如果这对您有帮助,请告诉我……如果没有……也许可以发布您的上述条件正在生成的 SQL 以及需要更改的位置。

祝你好运

关于Nhibernate:子查询上的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com