Как мне объединить таблицу "один ко многим" с результатами, добавленными только в меньшую таблицу?

В основном у меня есть стол один-ко-многим. Я хочу добавить столбцы таблицы большего размера в набор результатов таблицы меньшего размера. В итоге я получу набор результатов с тем же размером таблицы меньшего размера, но опять же с соответствующей информацией из многогранной таблицы.

Одна загвоздка: для многогранной таблицы не определен первичный ключ, хотя составной ключ может быть установлен (опять же, его нет в качестве ограничения).

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.

Я что-то упустил. Пожалуйста, уточните или предоставьте отобранные данные образца.

Другие вопросы по тегам