I figured it out ...

At 3:22 PM +0100 5/20/02, ds wrote:
>On Mon, 2002-05-20 at 13:34, Ray Zimmerman wrote:
>...
>  > For example, given the following data ...
>>
>>     CREATE TABLE Object (
>>       id int(11) NOT NULL auto_increment,
>>       PRIMARY KEY  (id)
>>     );
>>
>>     INSERT INTO Object (id) VALUES (1);
>>     INSERT INTO Object (id) VALUES (2);
>>     INSERT INTO Object (id) VALUES (3);
>>     INSERT INTO Object (id) VALUES (4);
>>     INSERT INTO Object (id) VALUES (5);
>>     INSERT INTO Object (id) VALUES (6);
>>
>>     CREATE TABLE Link (
>>       parent int(11) NOT NULL,
>>       child  int(11) NOT NULL,
>>     );
>>
>>     INSERT INTO Link (parent, child) VALUES (1, 4);
>>     INSERT INTO Link (parent, child) VALUES (1, 5);
>>     INSERT INTO Link (parent, child) VALUES (2, 4);
>>     INSERT INTO Link (parent, child) VALUES (2, 5);
>>     INSERT INTO Link (parent, child) VALUES (2, 6);
>>     INSERT INTO Link (parent, child) VALUES (3, 4);
>>
>>  ... I want to find all Objects that have exactly 2 children with ids
>>  4 and 5  (i.e. should match 1, but not 2 or 3) ... what's the query
>>  syntax?
>
>SELECT parent FROM Link WHERE child=4 OR child=5
>GROUP BY child HAVING count(*)=2;

Actually, while this may work for the specific example, it doesn't 
work in general ... here's the query I finally found to work ...

SELECT * FROM
     Object LEFT OUTER JOIN Link L0 ON
       (Object.id = L0.parent AND L0.child NOT IN (4,5)),
     Link L1,
     Link L2
   WHERE L1.parent = Object.id AND L1.child = 4
     AND L2.parent = Object.id AND L2.child = 5
     AND L0.id IS NULL;


>  > How about if I want to find all Objects which have no children (i.e.
>>  should match 4, 5 and 6, but not 1, 2 or 3).
>
>SELECT id FROM Object LEFT JOIN Link ON (Object.id=Link.parent)
>WHERE Link.parent IS NULL;

And yes, this is basically what I came up with here too. Thanks.

-- 
  Ray Zimmerman  / e-mail: [EMAIL PROTECTED] / 428-B Phillips Hall
   Sr Research  /   phone: (607) 255-9645  /  Cornell University
    Associate  /      FAX: (815) 377-3932 /   Ithaca, NY  14853

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to