there are 3 tables:
table_o
CREATE TABLE `table_o` (
`o_id` INT(11) NOT NULL AUTO_INCREMENT,
`conf` VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (`o_id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6
;
o_id | conf |
---|---|
1 | no |
2 | yes |
3 | yes |
4 | yes |
5 | no |
table_p
CREATE TABLE `table_p` (
`p_id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (`p_id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6
;
p_id | title |
---|---|
1 | p1 |
2 | p2 |
3 | p3 |
4 | p4 |
5 | p5 |
table_r
CREATE TABLE `table_r` (
`r_id` INT(11) NOT NULL AUTO_INCREMENT,
`p_id` INT(11) NOT NULL,
`mods` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`r_id`) USING BTREE,
INDEX `FK_table_r_table_p` (`p_id`) USING BTREE,
CONSTRAINT `FK_table_r_table_p` FOREIGN KEY (`p_id`) REFERENCES `newdb`.`table_p` (`p_id`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=7
;
r_id | p_id | mods |
---|---|---|
1 | 1 | 0 |
2 | 1 | 1 |
3 | 3 | 1 |
4 | 4 | 0 |
5 | 2 | 1 |
6 | 3 | 0 |
subqueries are working perfectly:
SELECT tp.p_id,
(SELECT COUNT(*)
FROM table_o o
WHERE o.conf = 'no') no_o,
(SELECT COUNT(*)
FROM table_r tr
WHERE tr.mods = 0) no_r
FROM table_p tp
WHERE tp.p_id = '1';
output:
p_id | no_o | no_r |
---|---|---|
1 | 2 | 3 |
but multiple JOIN statements gave the wrong result
SELECT tp.p_id,
COUNT(o.o_id) no_o,
COUNT(tr.p_id) no_r
FROM table_p tp
JOIN table_o o
ON o.conf = 'no'
JOIN table_r tr
ON tr.mods = 0
WHERE tp.p_id = '1';
output:
p_id | no_o | no_r |
---|---|---|
1 | 6 | 6 |
Could you explain to me why this is happening?