首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预期"(“关于EF-生成的查询”)

问预期"(“关于EF-生成的查询”)
EN

Stack Overflow用户
提问于 2020-03-03 14:54:54
回答 1查看 64关注 0票数 2

下面的代码是在MySQL服务器5.7上运行的SQL查询:

代码语言:javascript
复制
SELECT
  `t`.`c`,
  `t`.`Id`,
  `t0`.`Id`,
  `t0`.`Bio`,
  `t0`.`Image`,
  `t0`.`Name`,
  `t0`.`Follower_id`,
  `t0`.`Followed_id`
FROM
  (
    SELECT
      (
        SELECT
          COUNT(*)
        FROM
          `PROFILE_FOLLOW_PROFILE` AS `p`
        WHERE
          `u`.`Id` = `p`.`Followed_id`
      ) AS `c`,
      `u`.`Id`
    FROM
      `USER_PROFILES` AS `u`
    WHERE
      `u`.`Id` = 2
    LIMIT
      1
  ) AS `t`
  LEFT JOIN LATERAL (
    SELECT
      `u0`.`Id`,
      `u0`.`Bio`,
      `u0`.`Image`,
      `u0`.`Name`,
      `p0`.`Follower_id`,
      `p0`.`Followed_id`
    FROM
      `PROFILE_FOLLOW_PROFILE` AS `p0`
      INNER JOIN `USER_PROFILES` AS `u0` ON `p0`.`Follower_id` = `u0`.`Id`
    WHERE
      `t`.`Id` = `p0`.`Followed_id`
    ORDER BY
      (
        SELECT
          1
      )
    LIMIT
      10 OFFSET 0
  ) AS `t0` ON TRUE
ORDER BY
  `t`.`Id`,
  `t0`.`Follower_id`,
  `t0`.`Followed_id`,
  `t0`.`Id`

此查询不会运行,并将返回以下错误:

代码语言:javascript
复制
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(     SELECT       `u0`.`Id`,       `u0`.`Bio`,       `u0`.`Image`,       `u0`.`' at line 29

此语句由以下EF查询生成:

代码语言:javascript
复制
        var selectedProfiles = _context.USER_PROFILES
                                    .Where(x => x.Id == id)
                                    .Select(x => new PagedListResult<ProfileForPostDto>
                                    {
                                        Total = x.Followers.Count,
                                        Data = (x.Followers
                                            .Select(f => new ProfileForPostDto
                                            {
                                                Id = f.Follower.Id,
                                                Bio = f.Follower.Bio,
                                                Image = f.Follower.Image,
                                                Name = f.Follower.Name
                                            })
                                            .Skip((pageNum - 1) * pageSize)
                                            .Take(pageSize)
                                            .ToList()),
                                        Page = pageNum,
                                        PageSize = pageSize
                                    }).FirstOrDefault();

我一直在检查sql查询的语法,根据我自己和SQL验证器的说法,它似乎是正确的。

程序的日志指向语句的同一部分:

代码语言:javascript
复制
2020-03-02 20:06:44.239 +01:00 [Error] Failed executing DbCommand ("9"ms) [Parameters=["@__id_0='?' (DbType = Int32), @__pageSize_3='?' (DbType = Int32), @__p_2='?' (DbType = Int32)"], CommandType='Text', CommandTimeout='30']"
""SELECT `t`.`Id`, `t1`.`Id`, `t1`.`Bio`, `t1`.`Image`, `t1`.`Name`, `t1`.`Type`, `t1`.`User`, `t1`.`Follower_id`, `t1`.`Followed_id`
FROM (
    SELECT `u`.`Id`
    FROM `USER_PROFILES` AS `u`
    WHERE `u`.`Id` = @__id_0
    LIMIT 1
) AS `t`
LEFT JOIN LATERAL (
    SELECT `u0`.`Id`, `u0`.`Bio`, `u0`.`Image`, `u0`.`Name`, `u0`.`Type`, `u0`.`User`, `t`.`Follower_id`, `t`.`Followed_id`
    FROM (
        SELECT `p`.`Follower_id`, `p`.`Followed_id`
        FROM `PROFILE_FOLLOW_PROFILE` AS `p`
        WHERE `t`.`Id` = `p`.`Followed_id`
        ORDER BY (SELECT 1)
        LIMIT @__pageSize_3 OFFSET @__p_2
    ) AS `t0`
    INNER JOIN `USER_PROFILES` AS `u0` ON `t`.`Follower_id` = `u0`.`Id`
) AS `t1` ON TRUE
ORDER BY `t`.`Id`, `t1`.`Follower_id`, `t1`.`Followed_id`, `t1`.`Id`"
2020-03-02 20:06:44.308 +01:00 [Error] An exception occurred while iterating over the results of a query for context type '"Cosprea.EntityFrameworkCore.Models.CospreaAPIContext"'."
""MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(
    SELECT `u0`.`Id`, `u0`.`Bio`, `u0`.`Image`, `u0`.`Name`, `u0`.`Type`, `u0' at line 8

我不知道到底出了什么问题,再加上一个"(“上面写着)是没有任何意义的。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-03 14:59:27

MySQL不支持横向连接

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60509932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档