@Living4tomorrow

Как правильно сделать запрос?

Есть 3 таблицы, таблица регионов regions, курьеров couriers и таблица - связь has Many region_couriers.

Нужно сделать SELECT тех курьеров, которые на данный момент не заняты.

в таблице регионов 3 столбца id, name, days_in_transit - дни в пути INT
в таблице region_couriers 5 столбцов id, courier_id, region_id, departure_date DATE , return_date DATE

Хочу сделать такую проверку чтоб сразу брала из таблицы регионов сколько дней займет путь, а потом сравнила с return_date сегодняшнюю дату отнять эти дни с датой возвращения и не пойму как это сделать.

дошел только до такого, но B.region_id уже не видно в этих скобках, подскажите вообще можно только на sql такое сделать или без ЯП не обойтись ?

SELECT A.id, A.name 
	FROM couriers A 
	LEFT JOIN (SELECT * FROM region_couriers WHERE return_date<= (
	SELECT days_in_transit FROM regions C WHERE C.id = B.region_id)) B 
	ON A.id = B.courier_id
	WHERE B.courier_id IS NULL
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
@Living4tomorrow Автор вопроса
Додумался сам, кому интересно, вот что получилось:
SELECT A.id, A.name 
FROM couriers A 
LEFT JOIN (SELECT rc.id, rc.courier_id 
FROM region_couriers rc 
JOIN regions r 
ON rc.region_id = r.id 
WHERE rc.return_date <= DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -r.days_in_transit DAY)) B 
ON A.id = B.courier_id
WHERE B.courier_id IS NULL

Не знал о функции date_add и джоинить не хотелось в скобках, без этого оказалось не обойтись
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы