【问题标题】:Inner join union not same amounth of columns内部连接联合不同的列数
【发布时间】:2021-10-27 17:45:56
【问题描述】:
    @Query(value="
    select * from (select * from Post WHERE Post.id < :lastPostId) as p 
    JOIN Follower f ON(f.to_id = p.user_id) WHERE f.from_id = :#{#currentUser.id} 
    UNION 
    select * from (select * from Post WHERE Post.id < :lastPostId) as p 
    JOIN public.user u ON(u.group_id = :#{#currentUser.group.id})"
    List<Post> getNewsFeedPosts(User currentUser,Long lastPostId);

您好,我正在尝试合并两个查询,但我遇到了异常,所以合并没有相同数量的列。

谁能帮忙,也许如何改进查询

【问题讨论】:

  • 我猜这是因为您将列连接到两个表中,而在您的选择 *.尝试在您的选择中指定 clumns。
  • 正如 Ruud 所说,当您 UNION 两个 select 语句时,两个语句返回的列的数量和顺序必须相同。尝试独立运行这两个语句,您应该会看到每个返回的列不一样。

标签: java sql spring spring-boot jpa


【解决方案1】:

根据以前的答案,我想出了这个解决方案

   @Query(nativeQuery = true, value =
            "WITH posts as (SELECT * FROM post p WHERE p.id < :lastPostId) " +
            "select p.id,p.user_id,p.created_at,p.description,p.name FROM posts p JOIN Follower f ON(f.to_id = p.user_id) WHERE f.from_id = :#{#currentUser.id} " +
            "UNION " +
            "SELECT p.id,p.user_id,p.created_at,p.description,p.name FROM posts p JOIN public.user u ON(u.group_id = :#{#currentUser.group.id} ) ORDER BY id DESC LIMIT 5")
List<Post> getNewsFeedPosts(User currentUser,Long lastPostId);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多