Forum Webscript.Ru

Общие => Базы данных => Тема начата: Jean от 22 Июня 2004, 15:26:58

Название: проблема с вложенным запросом
Отправлено: Jean от 22 Июня 2004, 15:26:58
народ помогите с вложенным запросом

такой выдает ошибку:
select o.name
from object o
where o.id not in (select o.id
from object o
where o.deleted = 1);

у меня стоит MySQL 4.0.1
на ней вроде есть поддержка вложенных запросов, значит
запрос все-таки неправильно написан
Название: проблема с вложенным запросом
Отправлено: tserbis от 22 Июня 2004, 15:32:48
SELECT name
FROM object
WHERE deleted != 1
Название: проблема с вложенным запросом
Отправлено: Jean от 22 Июня 2004, 15:51:28
Мне так нельзя.
возможен вариант напрмер, что будет две записи с именем \'object_name\'
и у одной записи будет deleted = 1, а у другой deleted = 0
так вот твой запрос покажет в таком случае ту, у которой
deleted =0, а мне такая запись не нужна

(я немного неправильно построил запрос в самом начале)
Название: проблема с вложенным запросом
Отправлено: tserbis от 22 Июня 2004, 16:09:32
>> я немного неправильно построил запрос в самом начале
мило :-)

SELECT name, SUM(deleted) AS s
FROM object
GROUP BY name
HAVING s=0

Изврат немного, правда...
Название: проблема с вложенным запросом
Отправлено: hanslinger от 22 Июня 2004, 16:17:06
Зачем здесь SUM(deleted)?
====
Вопрос снимаю. Кошмар +)
Название: проблема с вложенным запросом
Отправлено: Jean от 22 Июня 2004, 16:17:55
о зашебись!, все работает
спасибо

не думал, что есть такое простое решение
Название: проблема с вложенным запросом
Отправлено: Jean от 23 Июня 2004, 11:12:14
а вообще то не совсем то что нужно

предположим у меня есть
три записи
name,deleted:

(a,0)
(a,1)
(a,0)

то есть мне нужен такой запрос, который выводит последнюю из записей с одинаковым именем, если при этом у нее deleted <> 1

таблица
(a,0)
(a,1)
(a,0)
(b,0)
(b,1)

результат:
(a,0)

--------------

таблица
(a,0)
(a,1)
(b,0)
(b,1)
(b,0)

результат:
(b,0)

---------

таблица
(a,0)
(a,1)
(a,0)
(b,0)
(b,1)
(b,0)

результат:
(a,0)
(b,0)

-----------------

таблица
(a,0)
(a,1)
(b,0)
(b,1)

результат:
--
Название: проблема с вложенным запросом
Отправлено: tserbis от 23 Июня 2004, 11:19:10
Jean
я пас... Ты меняшь условия задачи всё время... :-))
Скажу только, что вот этого
>> последнюю из записей
не существует.
Название: проблема с вложенным запросом
Отправлено: Jean от 23 Июня 2004, 11:29:48
в смысле не существует? последняя - я имею ввиду - с наибольшим id
то есть к примеру:
таблица
(1,a,0)
(2,a,1)
(3,a,0)
(4,b,0)
(5,b,1)
(6,b,0)

результат:
(3,a,0)
(6,b,0)

или ты что-то другое подразумеваешь под несуществованием последней?
Название: проблема с вложенным запросом
Отправлено: hanslinger от 23 Июня 2004, 11:33:42
SELECT name, SUM(deleted) AS s
FROM object
HAVING s=0
ORDER BY name DESC
LIMIT 0,1
Название: проблема с вложенным запросом
Отправлено: Jean от 23 Июня 2004, 11:59:11
спасибо, конечно, но не работает :))

(1,a,0)
(2,a,1)
(3,a,0)
(4,b,0)
(5,b,1)
(6,b,0)


выдает результат:
 (пусто)

и вообще если я правильно понял, этот запрос
выберет 1ую строку в результате (limit 0,1)

а вот эта часть
select *
from object o
having sum(o.deleted) =0
order by o.name


не выдаст ничего потому что если есть три записи с deleted = 0,1,0, то сумма(deleted)=1


в общем что-то не работает
Название: проблема с вложенным запросом
Отправлено: hanslinger от 23 Июня 2004, 12:54:30
Попробуй вернуть на место GROUP BY name, у меня сейчас нет возможности тестировать :(