Автор Тема: проблема с вложенным запросом  (Прочитано 4328 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« : 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
проблема с вложенным запросом
« Ответ #1 : 22 Июня 2004, 15:32:48 »
SELECT name
FROM object
WHERE deleted != 1

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« Ответ #2 : 22 Июня 2004, 15:51:28 »
Мне так нельзя.
возможен вариант напрмер, что будет две записи с именем \'object_name\'
и у одной записи будет deleted = 1, а у другой deleted = 0
так вот твой запрос покажет в таком случае ту, у которой
deleted =0, а мне такая запись не нужна

(я немного неправильно построил запрос в самом начале)

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
проблема с вложенным запросом
« Ответ #3 : 22 Июня 2004, 16:09:32 »
>> я немного неправильно построил запрос в самом начале
мило :-)

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

Изврат немного, правда...

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
проблема с вложенным запросом
« Ответ #4 : 22 Июня 2004, 16:17:06 »
Зачем здесь SUM(deleted)?
====
Вопрос снимаю. Кошмар +)
« Последнее редактирование: 22 Июня 2004, 16:51:09 от hanslinger »

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« Ответ #5 : 22 Июня 2004, 16:17:55 »
о зашебись!, все работает
спасибо

не думал, что есть такое простое решение

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« Ответ #6 : 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
проблема с вложенным запросом
« Ответ #7 : 23 Июня 2004, 11:19:10 »
Jean
я пас... Ты меняшь условия задачи всё время... :-))
Скажу только, что вот этого
>> последнюю из записей
не существует.

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« Ответ #8 : 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

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
проблема с вложенным запросом
« Ответ #9 : 23 Июня 2004, 11:33:42 »
SELECT name, SUM(deleted) AS s
FROM object
HAVING s=0
ORDER BY name DESC
LIMIT 0,1

Оффлайн Jean

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 113
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема с вложенным запросом
« Ответ #10 : 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

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
проблема с вложенным запросом
« Ответ #11 : 23 Июня 2004, 12:54:30 »
Попробуй вернуть на место GROUP BY name, у меня сейчас нет возможности тестировать :(

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28