Итак, я хотел бы запустить запрос SQL, который получает значения из нескольких таблиц. Я хочу sh, чтобы получить:
- имя упражнения и идентификатор упражнения из таблицы упражнений
- идентификатор соединения из таблицы упражнений_соединения
- setNumber, minReps, maxReps из таблицы упражнений_workout_goals
У меня также есть log_entries_table.
В этой таблице хранится информация об упражнении, которое пользователь зарегистрировал. Из этой таблицы я sh, чтобы получить COUNT всех журналов для указанной c даты, если таковые имеются.
Если журналов нет на дату, я хотел бы, чтобы возвращаемое значение было 0.
Диаграмма ER
Из моих исследований кажется, что мне понадобится какое-то условное предложение WHERE, но только если log_entry существует в дату, которая передается ему.
Если журнала нет, я просто хотел бы, чтобы раздел WHERE date = :date
игнорировался.
В настоящий момент мой запрос возвращает только результаты, в которых logEntry присутствует из-за моего WHERE date = :date
(дата берется из таблицы log_Entries, поэтому, если журнал отсутствует, не будет вообще никакой даты).
Я не могу разобраться, как сделать WHERE date = :date
условно и запускать его только в упражнениях, в которых присутствует хотя бы один logEntry.
Любая помощь будет принята с благодарностью.
Мой текущий запрос (Это только возвращает значения, в которых logEntry на th Присутствует дата его прохождения.)
@Query("SELECT exercises_table.exercise_Name, exercises_table.exercises_id,
exercise_workout_goals_table.set_number,
exercise_workout_goals_table.junction_id, exercise_workout_goals_table.min_reps,
exercise_workout_goals_table.max_reps, log_id, COUNT(log_id) AS logs_today FROM
exercises_table LEFT JOIN exercise_workout_junction_table ON
exercises_table.exercises_id = exercise_workout_junction_table.exercise_id LEFT
JOIN exercise_workout_goals_table ON
exercise_workout_junction_table.exercise_workout_id =
exercise_workout_goals_table.junction_id JOIN log_entries_table ON
exercise_workout_junction_table.exercise_workout_id =
log_entries_table.junction_id WHERE exercise_workout_junction_table.workout_id =
:button_id AND log_entries_table.date = :date ORDER BY
exercise_workout_goals_table.junction_id; ")
LiveData<List<ExerciseAndGoal>> getAllWorkoutExercises(int button_id, String date);
Упражнение и цель
(Это содержит все поля, в которых я хотел бы получить)
public class ExerciseAndGoal {
private String exercise_name;
private int set_number;
private int min_reps;
private int max_reps;
private int exercises_id;
private int junction_id;
private int log_id;
private int logs_today;
public String getExercise_name() {
return exercise_name;
}
public void setExercise_name(String exercise_name) {
this.exercise_name = exercise_name;
}
public int getSet_number() {
return set_number;
}
public void setSet_number(int set_number) {
this.set_number = set_number;
}
public int getMin_reps() {
return min_reps;
}
public void setMin_reps(int min_reps) {
this.min_reps = min_reps;
}
public int getMax_reps() {
return max_reps;
}
public void setMax_reps(int max_reps) {
this.max_reps = max_reps;
}
public int getExercises_id() {
return exercises_id;
}
public void setExercises_id(int exercises_id) {
this.exercises_id = exercises_id;
}
public int getJunction_id() {
return junction_id;
}
public void setJunction_id(int junction_id) {
this.junction_id = junction_id;
}
public int getLog_id() {
return log_id;
}
public void setLog_id(int log_id) {
this.log_id = log_id;
}
public int getLogs_today() {
return logs_today;
}
public void setLogs_today(int logs_today) {
this.logs_today = logs_today;
}
}