С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 16/04/07 в 00:10 |
К примеру имеем такую структуру таблицы:
Код: | CREATE TABLE `tasks` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`item_name` varchar(100) NOT NULL default '',
`deleted` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM; |
item_name может повторяться. задача в том, чтобы выдернуть все DISTINCT item_name WHERE deleted=1, но только если нет ни одной записи с таким же item_name, у которых deleted=0.
Если непонятно объяснил - пример:
Код: | ID | ITEM_NAME | DELETED
1 | aaa | 0
2 | bbb | 0
3 | bbb | 1
4 | ccc | 1 |
запрос должен вернуть только запись 4 ссс.
1 и 2 не возвращаем потому что deleted = 0.
3 не возвращаем потому что присутствует запись (2) с item_name = bbb и у нее deleted = 0.
Рейтинг по максимуму.
|
|
|
|
www.awm-tools.com
С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056
|
Добавлено: 16/04/07 в 00:51 |
Попробуй так:
Код: | SELECT
DISTINCT t1.item_name
FROM
tasks t1
WHERE
t1.deleted = 1 AND
(SELECT COUNT(t2.id) FROM tasks t2 WHERE t2.item_name=t1.item_name AND t2.deleted=0) = 0 |
|
|
|
|
С нами с 25.01.07
Сообщения: 257
Рейтинг: 262
|
Добавлено: 16/04/07 в 01:05 |
SELECT
t1.item_name
FROM
tasks t1 GROUP BY item_name HAVING count(deleted=0)=0
через HAVING должно быстрее вроде...
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 16/04/07 в 01:53 |
оба варианта не работают.
вариант Adult'a вызывает ошибку:
Код: | near 'SELECT COUNT(t2.id) FROM tasks t2 WHERE ....' |
версия мускуля 4.0.21
вариант brainstorm'a просто возвращает 0 рядов.
|
|
|
|
С нами с 18.01.06
Сообщения: 322
Рейтинг: 487
|
Добавлено: 16/04/07 в 15:36 |
У меня заработал такой код
Код: |
SELECT DISTINCT item_name, MIN(deleted) as _min, MAX(deleted) as _max FROM tasks WHERE 1 GROUP BY item_name HAVING (_min=1 AND _max=1)
|
С тебя рейтинг
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 16/04/07 в 15:54 |
да, работает, спасибо.
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |