Как вывести вместо одной записи из таблицы базы данных несколько других записей из другой таблицы по условию?
Есть две таблицы и пример их заполнения:
Таблица Основная:
Таблица Второстепенная:
Необходимо вывести на экран данные из этих двух таблиц таким образом, чтобы в Основной таблице в тех записях, где значение столбца split равно 1 вместо этих записей выводились записи из Второстепенной таблицы (по id этой записи).
Пример вывода:
Можно ли реализовать такой комплексный запрос в базу данных? Чтобы на выходе получился готовый ассоциативный массив, который можно было бы вывести на экран и легко с ним работать (фильтровать, сортировать и тд)?
Ответы (3 шт):
Думаю, ты имеешь в виду так называемые Join'ы
Например, в твоём случае (если я неправильно понял, поправь):
SELECT * FROM `Основная` JOIN `Второстепенная` ON `Основная`.id=`Второстепенная`.id_item WHERE `Основная`.split = 1
Чтобы менять названия полей, можно использовать Alias. Нужно лишь указать везде, где нужно кастомное название столбца таблицы, ключевое слово AS
Самый простой, и в то же время, наверное, самый производительный путь - два отдельных подзапроса и объединение результатов:
SELECT name, price, quantity, sum
FROM maintable
WHERE split IS NULL
UNION ALL
SELECT maintable.name, slavetable.price, slavetable.quantity, slavetable.sum
FROM maintable
JOIN slavetable ON maintable.id = slavetable.item_id
WHERE maintable.split IS NOT NULL;
Вариант с джойнами:
SELECT m.id
, m.name
, m.price
, IFNULL(s.qunatity, m.quantity) AS qnt
, IFNULL(s.sum, m.sum) AS sum
FROM main_table AS m
LEFT JOIN slave_table AS s ON (
s.id_item = m.id
AND m.split = 1
)


