views:

36

answers:

2

Basically I have a one-to-many table. I want to append the columns of the larger table to the result set of the smaller table. I will end up with a result set the same size of the smaller table, but again, with the relevant information from the many sided table.

One catch: the many sided table doesn't have a primary key defined, although a composite key could be established (again it isn't there as constraint).

A: 

Isn't this just an left join on the key?

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

Every record in small_table, but only the relevant rows in large_table.

I'm missing something. Please elaborate or provide scrubbed sample data.

Broam
The many sided table doesn't have a PK, the FK (which is the PK in the smaller, one sided table) isn't unique in the many sided table.. sorry, brb editing.
Zombies
+2  A: 

Since more than one record in t_large may correspond to a record in t_small, you need to choose what exactly you want to pick from t_large.

This means that you'll either need to aggregate all corresponding records from t_large (how?), or select a single record out of many (which?).

SELECT  s.*, SUM(l.value)
FROM    t_small s
LEFT JOIN
        t_large l
ON      s.id = l.small

or

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
        )

Now, imagine this table layout:

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

Could you please post the resultset which you'd like to see as a result of the query?

Quassnoi
+1: Because you're far too accommodating
OMG Ponies