达梦8数据库,使用无实体查询时,生成的sql有问题 返回

SqlSugar 沟通中
17 449

使用SqlsugarCore5.1.4.112版本,

代码语句为:busDB.SqlQueryable<esse_QYDLB_EmployeeIdent>(searchSql).Where(whereConModels).ToListAsync()

生成的Sql为

SELECT t.* FROM  

(

SELECT c."Id", c."IdentCode", a."OrganId", b."Account", b."Name", b."UserId", c."BirthDate", c."HireDate", d."Id" AS busId, d."QUYU" AS AreaName, d."SW" AS OrganName, d."GW" AS PostName 

FROM  esse_org."esse_org_organ_relation" a Inner JOIN esse_org."esse_org_organ_relation_user" b 

ON (a."Id" = b."OrganRelationId") 

Left JOIN esse_bus."esse_bpm_QYDLBMBJHB_employeeident" c 

ON (b."Account" = c."Account") 

Left JOIN esse_bus."esse_bpm_QYDLBMBJHB_QYDLBMBJHB_main" d 

ON (b."Account" = d."XM") 

where a."OrganId" in ('99068') and a."OrganTypeId" = '1438401863824314369' and b."IsPrimary" = 0 and (b."AreaId" is null )

) t   

WHERE  (   "t"."Account" LIKE N'%%'   OR   "t"."Name" LIKE N'%%'     )  


报无法解析的成员访问表达式["t"."Account"]这个错误

热忱回答17

  • 升级成最新版本也会报这个错误

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    我看SQL没有错

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    你去数据库工具跑能不能跑起来

    0 回复
  • @fate sta:跑不起来,需要把"t"."Account"]改为t."Account"才行,t不能有双引号

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    那你就不要加啊

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    我知道了你用的表格查询

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    前缀去掉就行了

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    你这个查询条件没必要有前缀

    0 回复
  • @fate sta:不是我加的,我传入的sql没有外面一层,sql语句如下

    "SELECT c.\"Id\", c.\"IdentCode\", a.\"OrganId\", b.\"Account\", b.\"Name\", b.\"UserId\", c.\"BirthDate\", c.\"HireDate\", d.\"Id\" AS busId, d.\"QUYU\" AS AreaName, d.\"SW\" AS OrganName, d.\"GW\" AS PostName FROM  " + CommonName.OrgConfigId + ".\"esse_org_organ_relation\" a Inner JOIN " + CommonName.OrgConfigId + ".\"esse_org_organ_relation_user\" b ON (a.\"Id\" = b.\"OrganRelationId\") Left JOIN " + CommonName.BusConfigId + ".\"esse_bpm_QYDLBMBJHB_employeeident\" c ON (b.\"Account\" = c.\"Account\") Left JOIN " + CommonName.BusConfigId + ".\"esse_bpm_QYDLBMBJHB_QYDLBMBJHB_main\" d ON (b.\"Account\" = d.\"XM\") where a.\"OrganId\" in ('" + string.Join("','", organIds) + "') and a.\"OrganTypeId\" = '" + organTypeId + "' and b.\"IsPrimary\" = 0 and b.\"AreaId\" is null";

    外面这层是因为有个where查询条件,orm生成的时候变成这样的


    0 回复
  • @fate sta:orm生成的时候,生成查询达梦数据库的语句时,在t这个地方多加了双引号

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    image.png

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    这个条件不是你加的吗 ,不加哪来的前缀

    0 回复
  • fate sta fate sta VIP0
    2023/11/17

    如果还有问题提供一简单的,可以重现问题的示例

    0 回复
  • @fate sta:问题确实是因为where里面造成的,现在就碰到一个问题,我这个查询sql里面三个表中,每个表都会有name字段,我就在where里面指定是哪个name,才会造成orm执行时候外面增加了一层

    SELECT t.* FROM  

    (

    )t ,因为这几个表不在一个库里面,是在同一台达梦数据库服务器上建立不同的库,现在需要连表查询,我看了教程里面针对达梦的同服务器连表查询没有具体的demo

    image.png

    现在这个问题就没法解决了

    0 回复
  • fate sta fate sta VIP0
    2023/11/20

    你先把SQL想好怎么写

    0 回复
  • fate sta fate sta VIP0
    2023/11/20

    把SQL写出来

    0 回复
  • @fate sta:因为是一个低代码系统,查询条件都是与前端商定好的,做好解析后List<IConditionalModel>形式作为查询条件,而不是直接变成sql语句的,解析的方法是公用的。所以后面where里面的这个List<IConditionalModel>数组必须有,而且查询的时候可能会有Name这种多张表都有的字段,使用sql语句是因为跨库的方法QueryableWithAttr达梦用不了才是用sql

    0 回复