Re: A simple join question that may stump you

Поиск
Список
Период
Сортировка
От Thurstan R. McDougle
Тема Re: A simple join question that may stump you
Дата
Msg-id 3BB1C98C.D45484C3@my-deja.com
обсуждение исходный текст
Список pgsql-sql
How about:-
SELECT id
FROM (a LEFT JOIN b WHERE a.flag=b.flag)
GROUP BY id
HAVING        ((COUNT(*)=COUNT(b.flag))   AND        (COUNT(*)=(SELECT COUNT(*) FROM b AS b_cnt)));

This relys on COUNT(field) not counting NULLs, and that NULL is what the
LEFT JOIN returns for an absent b.flag:-  ID a.FLAG b.FLAG
----- ------ ------   1      1      1   2      1      1   2      2      2   3      1      1   3      2      2   3
3  NULL   4      1      1   4      3   NULL
 

N.B In your test table you missed the case of having some, but not all
of b's flags and one or more others...  ID  FLAG
----- -----   4     1   4     3


Ross Smith wrote:
> 
> OK, I have 2 tables, table A:
> 
>    ID  FLAG
> ----- -----
>     1     1
>     2     1
>     2     2
>     3     1
>     3     2
>     3     3
> 
> and table B:
> 
>  FLAG
> -----
>     1
>     2
> 
> I want to find all id's from table A that have every flag in table B
> but no extra flags.  So, I'd end up with:
> 
>    ID
> -----
>     2
> 
> As id 2 has both flag 1 and flag 2, id 1 doesn't have flag 2, and id 3
> has flag 3.
> 
> I know it can be done, 'cause I've done it in the past, but I've spent
> hours on this to no avail.  Surfing the net proved fruitless as well.
> 
> Any help would be greatly appreciated.

-- 
This is the identity that I use for NewsGroups. Email to 
this will just sit there. If you wish to email me replace
the domain with knightpiesold . co . uk (no spaces).


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Josh Berkus"
Дата:
Сообщение: Re: PgAdmin
Следующее
От: Frederick Klauschen
Дата:
Сообщение: is it possible to get the number of rows of a table?