4

Sqlite room нужна помощь

Всех приветствую. Недавно начал изучать room(надстройка над sqlite в kotlin). Если есть кто шарящий - подскажите. Есть 3 таблицы employee, employees_skills, skills. В employees_skills хранятся все связи сотрудников с навыками в виде: id, employeeId, skillId. Есть задача в room получать все employees у которых есть определенный skill и наоборот, все skills которые есть у определенного employee.
Вопрос: как правильно составить запрос на получение этих данных, через join? Сутки копаю гугл и не пришел к какому- то пониманию join вообще. Единственное, к чему пришел, вот такой вложенный запрос

"SELECT * FROM employee_list WHERE id in (SELECT employeeID FROM employees_skills WHERE skillId = :skillId)"

Код работает, но как мне подсказали, лучше вложенный запрос не делать, а делать через 2 inner join.Как это сделать правильно - естественно не подсказали.
если подскажете, как это вывести либо в виде списка объектов employee либо в виде map(skillId - List<employee>) буду прям очень благодарен.

Лига Сисадминов

2.7K постов19.2K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

1
один из этих...
Автор поста оценил этот комментарий

Так то не мое собачье дело, но два вопроса:

1-

вот это вот "employee e" - это вы буквы экономите, чтоб тот, кто ваши селекты читать будет - хуем подавился, который вы на него положили? :)


2 не шарю в SQL, но вроде как joun без left или right = full join, и он вернет все skills, у которых нет ни одного employees, и всех employees у которых нет ни одного skills

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
1. Шутейка про сокращения огонь - запишем
2.join без left/right это inner join, если я правильно курил литературу.
показать ответы
1
Автор поста оценил этот комментарий

Без разницы, как тебе проще представить, так и делай.

таблица employees_skills обьединяет данные из employee и skills через employee.ID и skills.ID , так что вне зависимости от порядка таблиц

SELECT * -- all columns

FROM

employee e

JOIN employees_skills es ON e.id = es.employeeId

JOIN skills s ON es.skillId = s.id

тебе будет давать одинаковое количество результатов, которые потом можно вычленить через alias таблицы (e для employee, s для skills , итд )

Но для простоты можно начать с таблицы, данные которой пойдут в SELECT, как ты и сделал

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо огромное. Покопавшись с вариантами, к такому и пришел. У меня ситуация просто чуток сложнее, мне помимо составления запроса нужно было ещё понимать, как room его для себя интерпретирует. Теперь я понял, что я просто собираю данные из нескольких таблиц в строку, а room сам определяет в какую переменную что засунуть. Уже опробовал, получение в виде map, где ключём является skill, а значением -список employees
7
Автор поста оценил этот комментарий

-- Получить все employees у которых есть определенный skill

SELECT

e.*

FROM

employee e

JOIN employees_skills es ON e.id = es.employeeId

JOIN skills s ON es.skillId = s.id

WHERE

s.skill_name = 'desired_skill';

-- Получить все skills которые есть у определенного employee

SELECT

s.*

FROM

skills s

JOIN employees_skills es ON s.id = es.skillId

JOIN employee e ON es.employeeId = e.id

WHERE

e.id = desired_employee_id;

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо большое. Т.е. я правильно понимаю, что начинать нужно с таблицы, чьи данные нам нужны, и заканчивать таблицей, id которой у нас есть? Вот почему я запутался, я пытался начать с того id по которому надо искать
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества