【问题标题】:How to use multiple select in one query?如何在一个查询中使用多项选择?
【发布时间】:2021-09-16 12:30:06
【问题描述】:

我要编写这个查询,它可以在 Console.sql 或 Workbench 中运行,但是当我在 @Query 中使用它时,会出现语法错误!

unexpected token: LIMIT


@Query("select w.name ,
                (select d.name 
                from document d 
                where w.id = d.workspace.id 
                order by (d.id) DESC 
                LIMIT 1 
                ) as nameLastDoc  
        from Workspace w  
            left join UserWorkspace u on u.workspace.id = w.id 
            left join Document d on w.id = d.workspace.id 
        group by (w.id)")

    List<?> findAllWorkspaces();

在我的 IDE 中,错误出现在下一个选择中 select w.name ,(select d.name ...

【问题讨论】:

标签: mysql spring-boot spring-data-jpa spring-data


【解决方案1】:

我不知道您遇到的确切错误,但在 JPA 查询中使用 limit 时遇到错误。您可以尝试将其删除一次,看看是否是问题所在。另请参阅this thread

【讨论】:

  • 在我的情况下不可能删除它,因为它返回超过 1 行。
【解决方案2】:

就我使用 JPA Repository 而言,它非常有限(与直接查询数据库相比)

您可以直接在Controller中进行查询/您的方法在哪里:

// Autowiring the JdbcTemplate so we can send queries to the database
@Autowired
JdbcTemplate jdbcTemplate;

// Mock method that returns what it got from the database
public List<Map<String, Object> findAllWorkspaces() {
String query = "select w.name ,
            (select d.name 
            from document d 
            where w.id = d.workspace.id 
            order by (d.id) DESC 
            LIMIT 1 
            ) as nameLastDoc  
    from Workspace w  
        left join UserWorkspace u on u.workspace.id = w.id 
        left join Document d on w.id = d.workspace.id 
    group by (w.id)";

return jdbcTemplate.queryForList(query);
}

它返回一个 Map 列表,其中字符串是列名,Object 是数据库中的值。

我在我的应用程序中使用了它,因为我必须进行自定义查询并且它有效。 如果这也不起作用,则您的选择查询已损坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2011-01-26
    相关资源
    最近更新 更多