It's currently late, so excuse me if I'm wrong. Is this, what you like to
have?

select sl.source_id, max(score)  from source s
inner join sourcelevel sl on s.source_id = sl.source_id
inner join level l on sl.level_id = l.level_id
group by 1

This is the highest score per source_id.

2011/1/12 George Francis <gfranc...@gmail.com>

> hmm, but if I try to constrain the inner query to the source_id of the
> outer query I get an error as follows:
>
> select source.source_id, score, name from source
> left join ( select * from sourcelevel, level where sourcelevel.level_id =
> level.level_id and sourcelevel.source_id = source.source_id order by score
> desc limit 1 )
>  as temp on temp.source_id = source.source_id;
>
> ERROR:  invalid reference to FROM-clause entry for table "source"
>
> LINE 14: ...l_id = level.level_id and sourcelevel.source_id = source.sou...
>
>                                                               ^
>
> HINT:  There is an entry for table "source", but it cannot be referenced
> from this part of the query.
>
>
>
> ********** Error **********
>
>
> ERROR: invalid reference to FROM-clause entry for table "source"
>
> SQL state: 42P01
>
> Hint: There is an entry for table "source", but it cannot be referenced
> from this part of the query.
>
> Character: 601
>
>
> On Wed, Jan 12, 2011 at 5:35 PM, Jasmin Dizdarevic <
> jasmin.dizdare...@gmail.com> wrote:
>
>> Because of the "score desc limit 1". The subselect returns only the higest
>> score and this is level 2.
>>
>> 2011/1/12 George Francis <gfranc...@gmail.com>
>>
>>  The following sql is intended to produce  a list of all unique SOURCEs,
>>> along with the corresponding LEVEL.NAME for LEVEL with highest SCORE
>>> value via SOURCELEVEL.
>>>
>>> I'd like to know why it doesn't return a SCORE value for SOURCE with id
>>> 3, despite there being a SOURCELEVEL entry for it.
>>>
>>> Many thanks,
>>>
>>>
>>> drop table if exists source;
>>>
>>> drop table if exists sourcelevel;
>>>
>>> drop table if exists level;
>>>
>>>
>>> create table source ( source_id int );
>>>
>>> create table sourcelevel ( source_id int, level_id int);
>>>
>>> create table level ( level_id int, score int, name text );
>>>
>>>
>>> insert into source values (1), (2), (3);
>>>
>>> insert into level values ( 1, 10 ,'alpha' ), ( 2, 20, 'beta' ), ( 3, 15,
>>> 'kappa' );
>>>
>>> insert into sourcelevel  values ( 1, 1 ), ( 1,2 ), ( 3,3 );
>>>
>>>
>>> select source.source_id, score, name from source
>>>
>>> left join ( select * from sourcelevel, level where sourcelevel.level_id =
>>> level.level_id order by score desc limit 1 )
>>>
>>> as temp on temp.source_id = source.source_id;
>>>
>>> --
>>> George
>>>
>>
>>
>
>
> --
> George Francis
> e-mail: gfranc...@gmail.com
>

Reply via email to