Martin Mouritzen wrote:
> Simpelt set:
> Jeg har 2 tabeller. tags og tags2ting. Tags har bare kolonnerne id og
> name, og tags2ting har "tagid,tingid" som kolonner.
>
> I queriet herunder, hiver jeg tingid ud, hvis der er ét af tagsne der
> matcher. Jeg vil gerne modificere det så det kun hiver ud hvis alle
> tags matcher.
>
> SELECT
> tags2ting.tingid
> FROM
> tags2ting,
> tags
> WHERE
> (
> tags.name = 'tag1'
> OR
> tags.name = 'tag2'
> )
> AND
> tags.id = tags2ting.tagid
>
>
> Altså, så hvis jeg i kolonnen tags har
>> id | name |
>>  1 | tag1 |
>>  2 | tag2 |
>
> og i kolonnen tags2ting har
>
>> tagid | tingid |
>>     1 |      1 |
>>     1 |      2 |
>>     2 |      2 |
>
> Så skal kun tingid 2 hives ud.
>
> Jeg tænker at det er et ret nemt problem, jeg syntes bare ikke lige at
> jeg kan finde løsningen. 
Det er ikke et nemt problem, hvis det skal løses i standard-sql - hvilket 
jeg er nødt til, når du ikke fortæller, hvilket system du bruger.
"Alle" er noget bøvl i sql. Spørgsmålet kan omskrives til:
"Find alle ting i tags2ting, hvor der ikke findes tags, der ikke findes i 
tags2ting."
På SQL:
select * from tags2ting tt1
where not exists
    (select * from tags t1
    where not exists
        (select * from tags2ting tt2
        where t1.tagid = t2.tagid
        and tt1.tingid = tt2.tingid))
Nogle systemer har en ALL-operatorer, andre implementerer relation division. 
Begge funktioner giver mulighed for simplere løsninger.
-- 
Venlig hilsen /Best regards
Kristian Damm Jensen