Реклама на сайте Advertise with us

Подмогните с SQL запросом

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 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.

Рейтинг по максимуму.

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 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

Засабмить свой вебмастерский ресурс, получи PR!

2
 



С нами с 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 должно быстрее вроде...

2
 



С нами с 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 рядов. icon_sad.gif

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)

С тебя рейтинг icon_smile.gif

6
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 16/04/07 в 15:54       Ответить с цитатойцитата 

да, работает, спасибо.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »