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