[英]One statement to select data from two MySQL tables. Show name instead of/by ID
[英]MySQL - one to many select from two tables
我有兩個表,一個包含人名(+ 其他數據),另一個包含與人相關的標簽。
人們:
person_id name other ...
1 Name 1 ...
2 Name 2 ...
3 Name 3 ...
...
標簽:
person_id tag_id
1 2
1 3
2 6
1 7
2 8
1 1
...
我想同時從兩個表中選擇信息,結果類似於:
person_id=1, name=Name 1, tag_id=[2,3,7,1]
這樣我就可以使用 Spring JDBC RowMapper 執行以下操作:
@Override
public PersonDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
PersonDetails personDetails = new GameDetails();
personDetails.setId(rs.getLong("person_id"));
personDetails.setName(rs.getString("name"));
personDetails.setTags((int[]) rs.getArray("tag_id").getArray());
return personDetails;
}
請嘗試以下操作:
SELECT
t.person_id,
p.name,
GROUP_CONCAT(t.tag_id SEPARATOR ',') `tag_id`
FROM
tags t
JOIN people p ON t.person_id = p.person_id
GROUP BY
t.person_id
這將導致
person_id name tag_id
1 Name1 3,7,1,2
2 Name2 6,8
由於您只是返回PersonDetails
我假設您的查詢假設只返回一個PersonDetails
而不是它的列表。 為此,您可以選擇執行以下操作
SELECT * FROM people p INNER JOIN tags t ON p.person_id = t.person_id where p.person_id = "your_person_id"
@Override
public PersonDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
PersonDetails personDetails = new GameDetails();
personDetails.setId(rs.getLong("person_id"));
personDetails.setName(rs.getString("name"));
List<Integer> tagList = new ArrayList<Integer>();
while(rs.next())
{
tagList.add()rs.getInt(tag_id);
personDetails.setTags((int[]) rs.getArray("tag_id").getArray());
}
personDetails.setTags(tagList.toArray());
return personDetails;
}
即使您想在 PersonDetails 創建一個 HashMap 並繼續在其中存儲對象時返回 List 。 對於每次迭代,檢查它是否存在於地圖中並相應地更新或創建。 最后返回 map.values() 應該返回一個列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.