Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посоветуйте по запросу 
:(
    Опции темы
joost
Дата 23.3.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Есть таблица 
table (object,properti,val) 
object - айди объекта 
properti - айди свойста объекта 
val - айди значения свойства объекта 

Нужно выбрать properti, которые имеют object-ы с properti=7 и val=3 

Например таблица 
1 3 4 
1 7 3 
2 4 1 
2 7 3 
3 1 1

использование IN сильно тормозит
PM MAIL   Вверх
Zloxa
Дата 23.3.2011, 16:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(joost @  23.3.2011,  16:22 Найти цитируемый пост)
Нужно выбрать properti, которые имеют object-ы с properti=7 и val=3 

тут и без запроса понятно что ответ = 7 smile 

Это сообщение отредактировал(а) Zloxa - 23.3.2011, 16:27


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
joost
Дата 23.3.2011, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Цитата(Zloxa @  23.3.2011,  16:27 Найти цитируемый пост)
тут и без запроса понятно что ответ = 7 

ответ то правильный 3,4
в реале в таблице 36к записей, а не то что в примере
PM MAIL   Вверх
Zloxa
Дата 23.3.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(joost @  23.3.2011,  16:48 Найти цитируемый пост)
ответ то правильный 3,4

Если этот ответ правильный, то он на другой вопрос. smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 23.3.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



впопрос таки кажется понял. 
Код

select distinct properti from table t1 where object in  (select object from table t2 where t2.properti=7 and  t1.val=3)

Цитата(joost @  23.3.2011,  16:22 Найти цитируемый пост)
использование IN сильно тормозит 

здесь может оказаться полезным индекс по (object) и составной индекс по (properti,val). Но может и нет.

Добавлено через 48 секунд
Цитата(Zloxa @  23.3.2011,  17:25 Найти цитируемый пост)
впопрос таки кажется понял. 

хотя... правильный ответ все равно не к этому вопросу.

Это сообщение отредактировал(а) Zloxa - 23.3.2011, 17:26


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
joost
Дата 23.3.2011, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



а как сделать через join выборку общего результата у более чем двух таблиц?
PM MAIL   Вверх
Zloxa
Дата 23.3.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



через Join  smile

Добавлено через 1 минуту и 10 секунд
http://segfault.kiev.ua/smart-questions-ru.html


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Frees
Дата 23.3.2011, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Я понял вопрос так...

нужно выбрать все проперти тех объектов у которых есть проперти 7 равное 3

Код

SELECT 
   T2.PROPERTI
FROM TABLE T
  JOIN TABLE T2 ON T2.OBJECT = T.OBJECT AND T2.PROPERTY <> 7
WHERE 
 T.PROPERTY = 7 AND T.VAL = 3
GROUP BY 1


поправьте если ошибаюсь.

Это сообщение отредактировал(а) Frees - 23.3.2011, 19:11


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
joost
Дата 24.3.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



счас задача такая
Есть три таблицы - t1, t2, t3 
Все с одной и тойже структурой 
t1(id) 
1 
2 
3 

t2(id) 
2 
3 
4 

t3(id) 
3 
4 
5 


Используя join выбираю id, которые есть во всех трех таблицах SQL:
 select t1.id from t1 inner join t2 on t1.id=t2.id inner join t3 on t1.id=t3.id group by t1.id


Правильным ли будет этот запрос для поставленой задачи - используя join выбрать id, которые есть во всех трех таблицах ?
PM MAIL   Вверх
joost
Дата 24.3.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



на практике выбирает, то что нужно, но в реале то наборы данных могут быть другие
потому интересует мнение по запросу с точки зрения теории

возможно запрос объеденит (результат пересичения t1 c t2) union (результат пересичения t1 c t3) или всеже выдаст общее пересичение для всех трех таблиц?

теорию по join читал, но все как-то не очень ясно - зразу сообразить трудно

буду благодарен за ответы старших товарищей!
PM MAIL   Вверх
Akina
Дата 24.3.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(joost @  24.3.2011,  11:45 Найти цитируемый пост)
Правильным ли будет этот запрос для поставленой задачи - используя join выбрать id, которые есть во всех трех таблицах ?

Формально правильный. Но я бы написАл
Код
select distinct t1.id from t1 inner join t2 on t1.id=t2.id inner join t3 on t1.id=t3.id

А если ID - уникальный хотя бы в одной из таблиц - то select ID именно из этой таблицы, и без distinct.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 24.3.2011, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(joost @  24.3.2011,  10:45 Найти цитируемый пост)
 id, которые есть во всех трех таблицах

intersect


Это сообщение отредактировал(а) Zloxa - 24.3.2011, 15:49


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 24.3.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Увы, intersect (как и except) реализован не везде... блин, как мне его в MS SQL 2000 нехватало, и как счас в MySQL нехватает...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 24.3.2011, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Ни разу не доводилось использовать. Ей богу. ))

Еxcept в оракле minus'ом зовется. Его - да, мне бы очень не хватало ))


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1222 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.