Code:
create table testAND (aID int auto_increment primary key, bID int, cID int, val_timestamp timestamp,val_int int, val_float float);
insert into testAND values (NULL,1,1,'20091214002233',NULL,1.05);
insert into testAND values (NULL,1,2,'20091214002233',105,NULL);
insert into testAND values (NULL,2,1,'20091214002233',NULL,1.95);
insert into testAND values (NULL,2,2,'20091214002233',115,NULL);
insert into testAND values (NULL,3,1,'20091214002233',NULL,1.15);
insert into testAND values (NULL,3,2,'20091214002233',130,NULL);
insert into testAND values (NULL,1,1,'20091214002244',NULL,0.50);
insert into testAND values (NULL,1,2,'20091214002244',150,NULL);
insert into testAND values (NULL,2,1,'20091214002244',NULL,1.25);
insert into testAND values (NULL,2,2,'20091214002244',125,NULL);
insert into testAND values (NULL,2,2,'20091214002255',25,NULL);
insert into testAND values (NULL,2,1,'20091214002255',NULL,2.55);
If you create the table above, I'm trying to find all (cID = 1 AND (val_float >= 1.00 AND val_float <= 2.00)
Code:
SELECT t1.bID, t1.cID, t1.val_timestamp, t1.val_int, t1.val_float FROM testand t1
INNER JOIN testand t2 ON t1.bID = t2.bID
WHERE (t1.cID = 2 AND (t1.val_int < 120 OR t1.val_int > 140))
AND (t2.cID = 1 AND (t2.val_float >= 1.00 AND t2.val_float <= 2.00))
GROUP BY t1.val_timestamp, t1.val_int
UNION
SELECT t2.bID, t2.cID, t2.val_timestamp, t2.val_int, t2.val_float FROM testand t1
INNER JOIN testand t2 ON t1.bID = t2.bID
WHERE (t1.cID = 2 AND (t1.val_int < 120 OR t1.val_int > 140))
AND (t2.cID = 1 AND (t2.val_float >= 1.00 AND t2.val_float <= 2.00))
GROUP BY t2.val_timestamp, t2.val_float
ORDER BY bID, cID;
This correctly (as far as I can tell) produces these results: