powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше писать запрос?
20 сообщений из 20, страница 1 из 1
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299631
так_лучше
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
plain,

eav.attr = 1 and eav0.attr = 2 and eav1.attr = 3
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #39299637
plain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да там есть еще 3 атрибут который группирует(забыл упомянуть)
поэтому вариант свыше :D не подходит
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #39299641
катехизис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
plainвариант свыше
молитвой достигли, али как?
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #39299643
plain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет просто создал тему
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #39299644
plainнет просто создал тему
кто такой нет? и почему он сам не пишет?
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299651
plainне большой коментарий таблица типа EAV сущность атрибут значение

это конечно же всё объясняет!
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299654
plainвариант 1
Код: plsql
1.
...




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


необходимо срочно добавить варианты 3 и 4! прямо срочно!
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299658
это уже не смешно
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299663
7 и 8 не хватает
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299678
plain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotge,Спасибо .Здорово.
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
Как лучше писать запрос?
    #39299702
bishnike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avotge,

на eav как раз вряд ли будет здорово смотреть всё :D
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #39299739
plain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если id in() вместо exists еще хуже?
...
Рейтинг: 0 / 0
Как лучше писать запрос?
    #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
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше писать запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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