Как мне объединить таблицу "один ко многим" с результатами, добавленными только в меньшую таблицу?
В основном у меня есть стол один-ко-многим. Я хочу добавить столбцы таблицы большего размера в набор результатов таблицы меньшего размера. В итоге я получу набор результатов с тем же размером таблицы меньшего размера, но опять же с соответствующей информацией из многогранной таблицы.
Одна загвоздка: для многогранной таблицы не определен первичный ключ, хотя составной ключ может быть установлен (опять же, его нет в качестве ограничения).
2 ответа
Поскольку более одной записи в t_large
может соответствовать записи в t_small
, вам нужно выбрать, что именно вы хотите выбрать из t_large
,
Это означает, что вам нужно либо объединить все соответствующие записи из t_large
(как?), или выберите одну запись из многих (которые?).
SELECT s.*, SUM(l.value)
FROM t_small s
LEFT JOIN
t_large l
ON s.id = l.small
или же
SELECT s.*, l.*
FROM t_small s
LEFT JOIN
t_large l
ON l.id =
(
SELECT MIN(id)
FROM t_large li
WHERE li.small = s.id
)
Теперь представьте себе эту таблицу:
t_small
id value
-- --
1 Small 1
2 Small 2
t_large
id small_id value
-- -- --
1 1 1
2 1 4
3 2 9
4 2 16
Не могли бы вы опубликовать набор результатов, который вы хотели бы видеть в результате запроса?
Разве это не просто соединение слева?
select * from small_table s left join large_table l on s.id = l.small_table_id
Каждая запись в small_table, но только соответствующие строки в large_table.
Я что-то упустил. Пожалуйста, уточните или предоставьте отобранные данные образца.