У меня есть следующий оператор выбора:MySQL: Как выбрать данные из столбца в другой таблице
SELECT
items.id,
items.name AS item_name,
items.tobuy,
items.list_id,
items.note,
items.unit,
MIN(NULLIF(packages.ppu, 0)) AS mppu,
packages.price AS mprice,
items._deleted
FROM
items
INNER JOIN
lists ON lists.id = items.list_id
LEFT JOIN
packages ON items.id = packages.item_id
WHERE
lists.user_id = 1 AND
items._deleted = '0'
GROUP BY
items.id
ORDER BY
tobuy DESC,
item_name
Но что я действительно хочу это цена прийти из пакета, который имеет минимальную ППУ (который не обязательно пакет с минимальной ценой).
Любые идеи?
Примеры записей:
Таблица: Предметы:
id, name, tobuy, list_id, note, unit, _deleted
95, test1, 1, 1, null, null, 0
69, test2, 1, 1, null, null, 0
194, test3, 1, 1, null, null, 0
162, test4, 1, 1, null, null, 0
Таблица: списки:
id, name, user_id
1, list1, 1
Таблица: Пакеты:
id, item_id, price, ppu
392, 95, 0, 0
117, 95, 13.49, 0.078
391, 95, 0, 0
386, 69, 0, 0
387, 69, 0, 0
388, 69, 0, 0
368, 194, 4.58, 0.138
18, 194, 3.38, 0.177
17, 194, 3.88, 0.144
Результаты должны быть четыре пункта с фоллом Дополнительная информация:
id, item_name, tobuy, list_id, note, unit, mppu, mprice, _deleted
95, test1, 1, 1, null, null, 0.078, 13.49, 0
69, test2, 1, 1, null, null, 0, 0, 0
194, test3, 1, 1, null, null, 0.138, 4.58, 0
162, test4, 1, 1, null, null, 0, 0, 0
Обратите внимание, что в пункте 162 не имеется соответствующих пакетов, но оно все еще отображается в списке. Это является причиной для «LEFT JOIN»
КСТАТИ «mppu» означает «минимальная цена за единицу»
Вопрос, почему вы используете LEFT JOIN вместо INNER JOIN? Это делает ваш запрос медленнее. Кроме того, я бы, по крайней мере, сначала отфильтровал списки на user_id, а затем присоединился к этому с остальными. – Ashalynd
, пожалуйста, укажите образцы записей с желаемым результатом. –
@Ashalynd, я сменил один из операторов LEFT JOIN на INNER JOIN, но я не могу изменить другой, потому что мне все еще нужно перечислять элементы, которые не имеют соответствующих данных в таблице пакетов. – Simpler