Итак, я уже давно борюсь с SQL-запросом на выход.
Вот что я хотел бы сделать:
Допустим, у нас есть 3 таблицы: фрукты, фермеры и продажи
Эти таблицы структурированы и заполнены следующим образом.
Фрукты:
__|_fruit______|_taste_
1| apple | sweet
2| banana | sweet
3| grapefruit | sour
Фермеры:
__|_farmer___|_field_____
1| ben | apple
2| mary | banana
3| mike | grapefruit
4| joanna | apple
5| clara | grapefruit
Продажа:
__|_fruit______|_amount__
1| apple | 50
2| banana | 25
3| apple | 30
4| grapefruit | 40
5| banana | 45
6| apple | 30
Теперь я хотел бы иметь возможность посмотреть, какие и сколько этих фруктов было продано. Результат, с которым я мог бы работать, выглядел бы примерно так
(ГДЕ fruits.fruit = "яблоко"):
fruits.fruit | farmers.farmer | sales.amount
apple | ben | 50
apple | joanna | 30
apple | null | 30
или как это
(ГДЕ fruits.fruit = "банан"):
fruits.fruit | farmers.farmer | sales.amount
banana | mary | 25
banana | null | 45
или как это
(ГДЕ fruits.fruit = "грейпфрут"):
fruits.fruit | farmers.farmer | sales.amount
grapefruit | mike | 40
grapefruit | clara | null
Я бы сохранил эти результаты в php и позже мог бы определить, какому фермеру нужно заплатить, какую сумму, потому что фермерам нужно платить надлежащим образом в отношении проданной суммы.
Я хотел бы сделать это только с одним запросом SQL и без таблицы перекрестных ссылок.
Мой подход к проблеме был следующий (который потерпел неудачу):
SELECT fruits.fruit, farmers.farmer, sales.amount
FROM fruits
JOIN farmers ON farmers.field = fruits.fruit
JOIN sales ON sales.fruit = fruits.fruit
WHERE fruits.fruit = "apple"
Последняя строка запросов должна измениться, чтобы получить ранее показанные результаты.
Разумно ли это делать без таблицы перекрестных ссылок?
Возможно ли это сделать?
Есть ли здесь совершенно другой подход, который предпочтительнее здесь?
Заранее спасибо
РЕДАКТИРОВАТЬ # 1: добавлена отсутствующая запись в продажах (6)
РЕДАКТИРОВАТЬ # 2: MySQL - версия 5.7.17