Как объединить таблицу «один ко многим» с результатами, добавленными только в меньшую таблицу? - PullRequest
2 голосов
/ 18 февраля 2010

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

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

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Поскольку более чем одна запись в 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

Не могли бы вы опубликовать набор результатов, который вы хотели бы видеть в результате запроса?

0 голосов
/ 18 февраля 2010

Разве это не просто соединение слева?

select * from small_table s left join large_table l on s.id = l.small_table_id

Каждая запись в small_table, но только соответствующие строки в large_table.

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

...