Задавайте вопросы, мы ответим
Вы не зашли.
Необходимо составить запрос к таблице users, которая имеет следующие поля: id, name, city (родной город), prim (отзыв пользователя о родном городе). Требуется найти всех пользователей таких, что есть еще люди, родившиеся в этом городе, и хотя бы у одного из них (для каждого города в отдельности) должен быть написан отзыв о своем городе. Сделать это нужно одним запросом без создания дополнительных таблиц. В результате смогла написать следующий запрос, но он не работает, поскольку выборка идет из одной таблицы((
SELECT * FROM users where city IN (SELECT city FROM users group by city having count(city) > 1 AND MAX(prim) IS NOT NULL)
Неактивен
Не очень мне нравится условие
Отредактированно deadka (23.06.2011 09:26:01)
Неактивен
А если таблица будет содержать запись (NULL,'Gorkiy','Grigoriy','Grigoriy city'), prim будет не NULL и COUNT(*) = 1, но по условию она не подходит, так как есть только один человек из этого города. И еще вопрос, разве допускается использование в запросе и подзапросе имя одной таблицы, у меня из-за этого выдавалась ошибка.
Неактивен
Да, условие должно быть HAVING COUNT(*) > 1, тогда выбираются люди только из Новосибирска.
Я правильно понимаю, что люди из москвы не должны выбираться, поскольку москвичей хоть и два, но отзыв оставил только один из них?
Что касается использования в запросе и подзапросе одной таблицы - допускается... А мой вариант запроса у Вас не сработал?
Приведите структуру Вашей таблицы (show create table users), сами данные, текст запроса, ошибку и версию mysql .
Отредактированно deadka (23.06.2011 19:21:05)
Неактивен
По условию, если хотя бы у одного есть отзыв, то выбираются все люди из этого города. То есть из приведенных вами данных условию удовлетворяют все строки кроме (NULL,'Gorkiy','Grigoriy',null).
К сожалению, сейчас не смогу привести номер ошибки, ближе к понедельнику могу точные данные написать. Отдельно выполняла подзапрос, выводился верный список городов. А когда присоединяла условие выбрать всех пользователей, которые родились в этом множестве городов, то выдавалась ошибка проверьте правильность написания запроса как-то так.
Неактивен
Неактивен
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) not null DEFAULT '',
`city` varchar(255) not null DEFAULT '',
`prim` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into `users` values
(NULL,'user1','Moscow,'my city')
,(NULL,'user2','Moscow','Moscow 2')
,(NULL,'user3','Moscow',null)
,(NULL,'user4','Novosibirsk',null)
,(NULL,'user5','Novosibirsk', null)
,(NULL,'user6','Volgograd','Volgograd city');
Требуемый результат - вывод следующих записей: (NULL,'user1','Moscow,'my city')
(NULL,'user2','Moscow','Moscow 2')
(NULL,'user3','Moscow',null)
С вариантом запроса SELECT * FROM `users` WHERE city IN (SELECT city FROM `users`GROUP BY city HAVING COUNT(*) > 1) выдается следующая ошибка:
Ответ MySQL:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT city FROM `users` GROUP BY city HAVING COUNT(*) > 1) LIMI
Версия MySQL 4.0.12.
Неактивен
Запрос
Неактивен