将sqlserver中的一段sql转换为sqlsugar的queryable,提示“列名不明确” 返回

SqlSugar
21 137
该叫什么 sanchez 发布于2周前
悬赏:5 飞吻

原sql:

SELECT SKU

FROM RB_Product WITH (NOLOCK)

WHERE CustomerID = 1

      AND SKU IN

          (

              SELECT p.SKU

              FROM RB_Product p WITH (NOLOCK)

                  LEFT JOIN RB_Product_GroupSku g WITH (NOLOCK)

                      ON p.SKU = g.SKU

                         AND g.CustomerID = p.CustomerID

              WHERE p.CustomerID = 1

                    AND p.DeleteStatus = 0

                    AND p.SKU = ''

              GROUP BY p.SKU

          );


转换后:

var query = _productRepository.GetQueryable()

                        .With(SqlWith.NoLock)

                        .Where(p => p.CustomerID == request.CustomerId);

                if (request.IsSingleGroupSKU == 0)

                {


                    query.Where(p => p.SKU == SqlFunc.Subqueryable<RB_Product>()

                            .LeftJoin<RB_Product_GroupSku>((p2, g) => p2.CustomerID == g.CustomerID && p2.SKU == g.SKU)

                            .Where(p2 => p2.CustomerID == request.CustomerId && p2.DeleteStatus == 0 && p2.SKU == request.SKU).GroupBy(p2 => p2.SKU).Select(p2 => p2.SKU));

                }

                var data = await query.Select(p => p.SKU).Distinct().ToListAsync();



报错信息:

Microsoft.Data.SqlClient.SqlException (0x80131904): 列名 'SKU' 不明确。


该怎么处理?有没有大佬提示下

热忱回答21

  • .Distinct() 扔select前面看看

    0 回复
  • @fate sta:试了,不行,感觉不是这个原因导致的

    0 回复
  • 你这个是什么数据库,你上面的SQL不像ORM生成的

    0 回复
  • 用AOP把监控的SQL发出来,并且提供具体是什么数据库

    0 回复
  • 还有实体类也发一下

    0 回复
  • RB_Product_GroupSku  RB_Product  还有主表

    0 回复
  • @fate sta:上面的sql是 go写的,现在要用sqlsugar重写

    0 回复
  • @fate sta:sqlserver,好,我先用aop看看

    0 回复
  • @fate sta:实体类字段有点多。。我截取这里用到的

    0 回复
  • SELECT DISTINCT

           [SKU] AS [SKU]

    FROM [RB_Product] p WITH (NOLOCK)

    WHERE ([CustomerID] = 1)

          AND [SKU] IN

              (

                  SELECT [SKU]

                  FROM [RB_Product] [p2]

                      LEFT JOIN [RB_Product_GroupSku] [g]

                          ON (

                                 ([p2].[CustomerID] = [g].[CustomerID])

                                 AND ([p2].[SKU] = [g].[SKU])

                             )

                  WHERE (

                            (

                                ([p2].[CustomerID] = 1)

                                AND ([p2].[DeleteStatus] = 0)

                            )

                            AND ([p2].[SKU] = '1367060')

                        )

                  GROUP BY [SKU]

              );


    查出来了,最后的group by 有问题,大佬看下怎么改


    0 回复
  • .GroupBy(p2 => p2.SKU)

    我在分组的时候是有用别名的,但生成出来的没有。

    0 回复
  • 还有就是:最上面的select sku那里也有问题

    0 回复
  • image.png

    0 回复
  • 感觉我自己写得没问题,是底层的问题么?

    image.png

    0 回复
  • @sanchez:太过复杂,你需要提供实体类我来写个DEMO重现,或者你控制台写个能重现的DEMO发我

    0 回复
  • 生成的SQL我也没看出哪错了

    0 回复
  • @fate sta:这个sql是我改过的,我红框标出来的地方就没有q2别名导致报错的


    原始sql是这样:

    image.png

    SELECT DISTINCT

           [SKU] AS [SKU]

    FROM [RB_Product] p WITH (NOLOCK)

    WHERE ([CustomerID] = 1)

          AND [SKU] IN

              (

                  SELECT [SKU]

                  FROM [RB_Product] [p2]

                      LEFT JOIN [RB_Product_GroupSku] [g]

                          ON (

                                 ([p2].[CustomerID] = [g].[CustomerID])

                                 AND ([p2].[SKU] = [g].[SKU])

                             )

                  WHERE (

                            (

                                ([p2].[CustomerID] = 1)

                                AND ([p2].[DeleteStatus] = 0)

                            )

                            AND ([p2].[SKU] = '1367060')

                        )

                  GROUP BY [SKU]

              );


    0 回复
  • 没看到哪里有红圈

    0 回复
  • 看到了 ,这边晚点我验证一下能不能重现了

    0 回复
  • sqlsugar不是最新记得先升级最新

    0 回复
  • 验证得怎么样了大佬

    0 回复