У нас есть таблица продуктов. Пользователи могут создавать новые продукты как копии существующих продуктов.
Вместо простого дублирования этих данных мы думаем, чтобы свести к минимуму размер базы данных, мы сохраним только отличия от "родительского" продукта. (говорили тысячи продуктов)
Я думаю, что для каждого нового "дочернего" продукта мы создаем новую запись в той же таблице, которая имеет "родительское" поле, которое имеет идентификатор родительского продукта.
Итак, при запросе для "дочернего" продукта существует ли способ объединить результаты, чтобы любые пустые поля в дочерней записи были взяты из родительского?
(Надеюсь, это имеет смысл)
Я бы предположил, что вы хотите иметь дочерние продукты дочерних продуктов (например, продукт C основан на продукте B, который, в свою очередь, основан на продукте A.) И были бы дети из тех и так далее (особенно с созданным пользователем контентом.) Это может быстро выйти из-под контроля и потребовать, чтобы вы выполняли либо длинные громоздкие запросы, либо собирали данные с кодом, а не SQL-запросами.
Я просто предлагаю это как соображение, потому что размер сбережений часто приводит к стоимости времени обработки. Просто убедитесь, что вы рассматриваете это, прежде чем прыгать во что-то, что не может быть легко отменено.
Да, вы можете это сделать.
Скажем, например, имя вашей таблицы - это Продукт, и вы хотите получить имя дочернего продукта, тогда вы можете запросить как,
select IF(c.productName = '',p.productName,c.productName) as childProductName
from Products p,Products c
where c.ID = p.ParentID
Аналогичным образом вы можете сделать это для других полей.