Вы хотите узнать, какая процедура дешевле в какой больнице в городе.
В MySQL 5.x вам придется использовать несколько внутренних подзапросов, чтобы найти самую дешевую процедуру по больницам, а затем снова присоединить ее к своим таблицам, чтобы получить необходимые данные.
См. Скрипту для настройки.
SQL Fiddle
MySQL 5.x :
Во-первых, вы хотите найти самую дешевую цену за процедуру с фильтрацией по вашему городу и больницам в этом городе.
Запрос 1 :
SELECT tp.Treatments_ID, min(tp.Price) AS price
FROM treatment_prices tp
INNER JOIN Hospital h ON tp.Hospital_ID = h.ID
INNER JOIN Cities c ON h.city_id = c.id
AND c.ID = 2
GROUP BY tp.Treatments_ID
Это дает вам
Результаты
| Treatments_ID | price |
|---------------|-------|
| 1 | 700 |
| 2 | 300 |
| 3 | 450 |
Теперь вы можете использовать это как свой подзапрос, чтобы снова связываться с вашими основными таблицами, чтобы получить данные, которые вы ищете.
Запрос 2 :
SELECT t2.TreatmentName, h2.Hospital_Name, s1.Price
FROM (
SELECT tp.Treatments_ID, min(tp.Price) AS price
FROM treatment_prices tp
INNER JOIN Hospital h ON tp.Hospital_ID = h.ID
INNER JOIN Cities c ON h.city_id = c.id
AND c.ID = 2
GROUP BY tp.Treatments_ID
) s1
INNER JOIN treatment_prices tp2 ON s1.Treatments_ID = tp2.Treatments_ID
AND s1.price = tp2.Price
INNER JOIN Hospital h2 ON tp2.Hospital_ID = h2.ID
INNER JOIN Treatments t2 ON tp2.Treatments_ID = t2.ID
Результаты
| TreatmentName | Hospital_Name | Price |
|------------------------|---------------|-------|
| nose surgery | pars | 700 |
| Orthopedic | Mehr | 300 |
| Knee joint replacement | ghaem | 450 |
Гораздо проще в более поздних версиях MySQL или любого другого языка SQL, который допускает оконные функции.
MySQL 8 + :
SELECT s1.TreatmentName, s1.Hospital_Name, s1.Price
FROM (
SELECT t.TreatmentName, h.Hospital_Name, tp.Price
, ROW_NUMBER() OVER (PARTITION BY tp.Treatments_ID ORDER BY tp.Price) AS rn
FROM treatment_prices tp
INNER JOIN Hospital h ON tp.Hospital_ID = h.ID
INNER JOIN Cities c ON h.city_id = c.id
AND c.ID = 2
INNER JOIN Treatments t ON tp.Treatments_ID = t.ID
) s1
WHERE rn = 1
;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=9b28f7543c3b127990654ad9e401c11a