







|
MySQL.RU - Webboard
Вернуться
Запрос с подсчётом - как написать? (Sly_G) 27/06/2005 - 23:52:00
Re: RTFM - LEFT JOIN (Dinky) 28/06/2005 - 00:43:01
From: Sly_G - 27/06/2005 - 23:52:00
Subject:Запрос с подсчётом - как написать?
-----------------
Имеются две следующие таблицы:
CREATE TABLE `predmet` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(16) NOT NULL default '',
PRIMARY KEY (`id`)
);
INSERT INTO `predmet` VALUES (1, 'Первый');
INSERT INTO `predmet` VALUES (2, 'Второй');
CREATE TABLE `color` (
`id` int(11) NOT NULL auto_increment,
`predmet` int(11) NOT NULL default '0',
`name` varchar(16) NOT NULL default '',
PRIMARY KEY (`id`)
);
INSERT INTO `color` VALUES (1, 1, 'синий');
INSERT INTO `color` VALUES (2, 1, 'красный');
---
Смысл в том, что есть предметы, а есть цвета. Причём, не у каждого предмета есть цвет, а если есть, то цветов может быть несколько.
В данном примере у предмета "Первый" 2 цвета, у предмета "Второй" ни одного.
Мне нужно получить список вида:
id предмета; имя предмета; кол-во цветов у предмета
Если я пишу
SELECT predmet.id,predmet.name,COUNT(color.id) FROM predmet,color WHERE color.predmet=predmet.id GROUP BY predmet.id
то получаю только:
id name COUNT(color.id)
1 Первый 2
потому что у второго предмета нет цветов в таблице color, и не выполняется условие color.predmet=predmet.id
Как правильно написать запрос, чтобы он выводил такое:
id name COUNT(color.id)
1 Первый 2
2 Второй 0
То есть, если цвета есть - тогда их кол-во, иначе - ноль.
Я понимаю, можно каждому предмету назначить цвет, дефолтный, и считать кол-во цветов - 1, но в моей задаче это неудобно. Да и вообще интересно узнать ответ, в принципе.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
22782
|
|