Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpRlLnk 280 of 322 menu
◀ ▶

Выборка через таблицу связи в Java

Запрос, который вытащит юзеров вместе с их городами, делает два соединения: первое присоединит к юзерам таблицу связи, а второе по связям присоединит города:

SELECT users.name AS user_name, cities.name AS city_name FROM users LEFT JOIN users_cities ON users_cities.user_id = users.id LEFT JOIN cities ON users_cities.city_id = cities.id

Результат запроса

Результат запроса в Java содержит имя каждого юзера столько раз, со сколькими городами он связан:

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<Map<String, String>> data = List.of( Map.of("user_name", "user1", "city_name", "city1"), Map.of("user_name", "user1", "city_name", "city2"), Map.of("user_name", "user1", "city_name", "city3"), Map.of("user_name", "user2", "city_name", "city1"), Map.of("user_name", "user2", "city_name", "city2"), Map.of("user_name", "user3", "city_name", "city2"), Map.of("user_name", "user3", "city_name", "city3"), Map.of("user_name", "user4", "city_name", "city1") ); } }

Удобнее переконвертировать такой результат и превратить его в следующий:

import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, List<String>> res = Map.of( "user1", List.of("city1", "city2", "city3"), "user2", List.of("city1", "city2"), "user3", List.of("city2", "city3"), "user4", List.of("city1") ); } }

Теперь напишем код, выполняющий такую конвертацию:

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<Map<String, String>> data = List.of( Map.of("user_name", "user1", "city_name", "city1"), Map.of("user_name", "user1", "city_name", "city2"), Map.of("user_name", "user1", "city_name", "city3"), Map.of("user_name", "user2", "city_name", "city1"), Map.of("user_name", "user2", "city_name", "city2"), Map.of("user_name", "user3", "city_name", "city2"), Map.of("user_name", "user3", "city_name", "city3"), Map.of("user_name", "user4", "city_name", "city1") ); Map<String, List<String>> res = new HashMap<>(); for (Map<String, String> elem : data) { String name = elem.get("user_name"); String city = elem.get("city_name"); res.computeIfAbsent(name, k -> new ArrayList<>()).add(city); } System.out.println(res); } }

Напишите запрос, который достанет товары вместе с их категориями. Товар может принадлежать нескольким категориям.

Выведите полученные данные в консоль так, чтобы в каждой строке сначала стояло имя продукта, а после двоеточия через запятую перечислялись категории этого продукта:

product1: category1, category2, category3 product2: category1, category3 product3: category1
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить