排除内部联接期间返回的重复数据

时间:2018-03-30 16:46:23

标签: java mysql spring

我正在创建一个视频游戏数据库。与问题相关的表格是:

1. game_data_primary (contains primary data such as release year and production company).

2. game_genre (contains game genre, a games can have multiple genres)

3. game_cast (again, a game can have many characters).

视频游戏详细信息页面需要跨所有三个表格的数据。因此,我必须INNER-JOIN这三个表,并获取数据。现在,这是问题所在。将返回许多将包含重复项的行。这是一个例子

标题发布Genre Character_name,picture_path

GTA V,2013,Action,Trevor,trevor_picture

GTA V,2013,Action,Michael,michael_picture

GTA V,2013,Action,Franklin,franklin_picture

GTA V,2013,Open-World,Trevor,trevor_picture

............................................... ....

............................................... ....

现在,我需要为ResultSet创建视频游戏对象。该对象具有一个转换模型列表。理想情况下,它应包含3个条目(T,M和F)。但是在映射时,由于这种情况下结果集的性质,我最终会在我的强制转换列表中添加许多重复的条目。

有没有正确的方法呢?我想要一种有效的方法来从ResultSet创建我的视频游戏模型。

这是映射:

    List<GameCastModel> cast = new ArrayList<>();
    List<String> genres = new ArrayList<>();
    GameInfoModelBuilder gameInfoBuilder = GameInfoModelBuilder.builder();
    for (Map<String, Object> row : rows) {
        cast.add(MovieCastModel.builder().name(String.valueOf(row.get("name")))
                .character_name(String.valueOf(row.get("character_name")))
                .profile_path(String.valueOf(row.get("profile_path"))).build());
        genres.add(CinestopConstants.GENRE_MAP.get(String.valueOf(row.get("genre_id"))));
        gameInfoBuilder.title(row.get("title").toString())
                .budget(String.format("%.2f",
                        ((Double) (Double.parseDouble(row.get("budget").toString()) / 1000000))))
            .plot(row.get("plot").toString())
                .release(row.get("release_date").toString())
                .revenue(String.format("%.2f",
                        ((Double) (Double.parseDouble(row.get("revenue").toString()) / 1000000))))
                .runtime(row.get("runtime").toString()).tagline(row.get("tagline").toString())
                .language(row.get("language").toString())
                ;
    }

    gameInfoBuilder.genre(genres);
    gameInfoBuilder.cast(cast); 

0 个答案:

没有答案