Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше писать запрос? / 20 сообщений из 20, страница 1 из 1
29.08.2016, 14:52:10
    #39299626
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
как лучше будет так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav0.attr = 2
           and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav0.id
                   and eav1.attr = 3))


или так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav0.attr = 2 )
   and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav.id
                   and eav1.attr = 3)           
...
Рейтинг: 0 / 0
29.08.2016, 14:57:25
    #39299631
так_лучше
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
plain,

eav.attr = 1 and eav0.attr = 2 and eav1.attr = 3
...
Рейтинг: 0 / 0
29.08.2016, 15:04:36
    #39299637
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
да там есть еще 3 атрибут который группирует(забыл упомянуть)
поэтому вариант свыше :D не подходит
...
Рейтинг: 0 / 0
29.08.2016, 15:07:14
    #39299641
катехизис
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
plainвариант свыше
молитвой достигли, али как?
...
Рейтинг: 0 / 0
29.08.2016, 15:08:32
    #39299643
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
нет просто создал тему
...
Рейтинг: 0 / 0
29.08.2016, 15:10:01
    #39299644
Как лучше писать запрос?
plainнет просто создал тему
кто такой нет? и почему он сам не пишет?
...
Рейтинг: 0 / 0
29.08.2016, 15:15:24
    #39299646
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
не большой коментарий таблица типа EAV сущность атрибут значение
вариант 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav.entid = eav0.entid
           and eav0.attr = 2
           and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav0.id
                   and eav1.entid = eav0.entid
                   and eav1.attr = 3))



вариант 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
            and eav.entid = eav0.entid
           and eav0.attr = 2 )
   and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav.id
             and eav.entid = eav1.entid
                   and eav1.attr = 3)    
...
Рейтинг: 0 / 0
29.08.2016, 15:21:00
    #39299651
Как лучше писать запрос?
plainне большой коментарий таблица типа EAV сущность атрибут значение

это конечно же всё объясняет!
...
Рейтинг: 0 / 0
29.08.2016, 15:22:39
    #39299652
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
вариант 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav.entid = eav0.entid
           and eav0.attr = 2
           and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav0.id
                   and eav1.entid = eav0.entid
                   and eav1.attr = 3))




вариант 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
            and eav.entid = eav0.entid
           and eav0.attr = 2 )
   and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav.id
             and eav.entid = eav1.entid
                   and eav1.attr = 3)    
...
Рейтинг: 0 / 0
29.08.2016, 15:25:58
    #39299654
Как лучше писать запрос?
plainвариант 1
Код: plsql
1.
...




вариант 2
Код: plsql
1.
...


необходимо срочно добавить варианты 3 и 4! прямо срочно!
...
Рейтинг: 0 / 0
29.08.2016, 15:27:51
    #39299657
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
вариант 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav.entid = eav0.entid
           and eav0.attr = 2
           and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav0.id
                   and eav1.entid = eav0.entid
                   and eav1.attr = 3))





вариант 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
            and eav.entid = eav0.entid
           and eav0.attr = 2 )
   and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav.id
             and eav.entid = eav1.entid
                   and eav1.attr = 3)    
...
Рейтинг: 0 / 0
29.08.2016, 15:29:52
    #39299658
Как лучше писать запрос?
это уже не смешно
...
Рейтинг: 0 / 0
29.08.2016, 15:31:07
    #39299660
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
вариант 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
           and eav.entid = eav0.entid
           and eav0.attr = 2
           and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav0.id
                   and eav1.entid = eav0.entid
                   and eav1.attr = 3))





вариант 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
  from EAVTABLE eav
 where eav.attr = 1
   and exists (select eav0.id
          from EAVTABLE eav0
         where eav.id = eav0.id
            and eav.entid = eav0.entid
           and eav0.attr = 2 )
   and exists (select eav1.id
                  from EAVTABLE eav1
                 where eav1.id = eav.id
             and eav.entid = eav1.entid
                   and eav1.attr = 3)    
...
Рейтинг: 0 / 0
29.08.2016, 15:33:19
    #39299663
Как лучше писать запрос?
7 и 8 не хватает
...
Рейтинг: 0 / 0
29.08.2016, 15:37:13
    #39299673
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
Жержи, друк
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT *
  FROM eavtable e                
 WHERE attr = 1
   AND ID IN (SELECT id
                FROM eavtable
               GROUP BY ID
              HAVING SIGN(SUM(CASE WHEN attr = 1 THEN 1 ELSE 0 END)) +
                     SIGN(SUM(CASE WHEN attr = 2 THEN 1 ELSE 0 END)) +
                     SIGN(SUM(CASE WHEN attr = 3 THEN 1 ELSE 0 END)) = 3)
...
Рейтинг: 0 / 0
29.08.2016, 15:42:19
    #39299678
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
Avotge,Спасибо .Здорово.
...
Рейтинг: 0 / 0
29.08.2016, 15:54:50
    #39299693
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
plain, здорово или нет не знаю )) (он же все записи смотрит, а экзист до первой найденной, смотря какие данные и что надо получить в общем)
Ну и единичку можно убрать конечно )
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT *
  FROM eavtable e                
 WHERE attr = 1
   AND id IN (SELECT id
                FROM eavtable
               WHERE attr IN (2, 3)
               GROUP BY ID
              HAVING SIGN(SUM(CASE WHEN attr = 2 THEN 1 ELSE 0 END)) +
                     SIGN(SUM(CASE WHEN attr = 3 THEN 1 ELSE 0 END)) = 2)
...
Рейтинг: 0 / 0
29.08.2016, 16:03:42
    #39299702
bishnike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
Avotge,

на eav как раз вряд ли будет здорово смотреть всё :D
...
Рейтинг: 0 / 0
29.08.2016, 16:51:20
    #39299739
plain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
А если id in() вместо exists еще хуже?
...
Рейтинг: 0 / 0
29.08.2016, 17:11:14
    #39299759
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше писать запрос?
plainА если id in() вместо exists еще хуже?
А кто его знает ) Попробуй без in и без exists :)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT *
  FROM (SELECT e.*,
               SUM(CASE WHEN attr = 2 THEN 1 ELSE 0 END) OVER(PARTITION BY id) attr2,       
               SUM(CASE WHEN attr = 3 THEN 1 ELSE 0 END) OVER(PARTITION BY id) attr3       
          FROM eavtable e)
 WHERE attr = 1
   AND attr2>0
   AND attr3>0
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше писать запрос? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]