|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
есть две таблицы, например группа товаров со столбцами название и ИД, и вторая типы товаров, со столбцами ИД, название типа, и ИД группы. Как мне сделать выборку групп у которых имеются товары, по идее это INNER JOIN который отфильтрует все пувстые группы но он мне выдаст в случае если у группы два и более товаров несколько строк с названием группы. в запросе мне надо запросить только список названий групп и их ИД ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:23 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:30 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms есть две таблицы, например группа товаров со столбцами название и ИД, и вторая типы товаров, со столбцами ИД, название типа, и ИД группы. Как мне сделать выборку групп у которых имеются товары, по идее это INNER JOIN который отфильтрует все пувстые группы но он мне выдаст в случае если у группы два и более товаров несколько строк с названием группы. в запросе мне надо запросить только список названий групп и их ИД по идее тут никаких JOINов (разве что типы товаров могут принадлежать к несуществующей группе товаров): Код: plsql 1. 2. 3.
Ну a если типы товаров моvут принадлежать к несуществующей группе товаров (плохой дизайн): Код: plsql 1. 2. 3. 4. 5. 6.
Или: Код: plsql 1. 2. 3. 4. 5. 6. 7.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:41 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms есть две таблицы, например группа товаров со столбцами название и ИД, и вторая типы товаров, со столбцами ИД, название типа, и ИД группы. Как мне сделать выборку групп у которых имеются товары, по идее это INNER JOIN который отфильтрует все пувстые группы но он мне выдаст в случае если у группы два и более товаров несколько строк с названием группы. в запросе мне надо запросить только список названий групп и их ИД Как мне сделать выборку групп у которых имеются типы товаров? ps select * from группа товаров t1 where exists (select 1 from типы товаров t2 where t2.ИД группы=t1.ИД) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:53 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
Stax, да, это будет работать но это очень плохой дизайн на каждую строку в выборке делать подзапрос where exists (SELECT ...), такие запросы работают медленно, проверено. У SY последний пример тоже плох, с подзапросом на каждую запись ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 08:36 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
SY kmskmskms есть две таблицы, например группа товаров со столбцами название и ИД, и вторая типы товаров, со столбцами ИД, название типа, и ИД группы. Как мне сделать выборку групп у которых имеются товары, по идее это INNER JOIN который отфильтрует все пувстые группы но он мне выдаст в случае если у группы два и более товаров несколько строк с названием группы. в запросе мне надо запросить только список названий групп и их ИД по идее тут никаких JOINов (разве что типы товаров могут принадлежать к несуществующей группе товаров): Код: plsql 1. 2. 3.
Ну a если типы товаров моvут принадлежать к несуществующей группе товаров (плохой дизайн): Код: plsql 1. 2. 3. 4. 5. 6.
Или: Код: plsql 1. 2. 3. 4. 5. 6. 7.
SY. Вот в последнем запросе возможно JOIN будет лучшим решением. Но многое зависит от размера PRODUCT_TYPES ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 08:44 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms такие запросы работают медленно, проверено. У SY последний пример тоже плох, с подзапросом на каждую запись Здесь на слово не верят. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 10:34 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms Stax, да, это будет работать но это очень плохой дизайн на каждую строку в выборке делать подзапрос where exists (SELECT ...), такие запросы работают медленно, проверено. У SY последний пример тоже плох, с подзапросом на каждую запись Там у вас такой же оптимизатор, как в Oracle Database? (похоже, что намного хуже :-) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 11:41 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
123йй, тут это и так очевидно глядя на код. В уме представь как будет проходить запрос в целом. В идеале сделать както джойном но чтоб учитывались не все а хотябы одно вхождение дочерней таблицы. Таблицы огроменные, и вариант с подзапросами на каждую строку не вариант ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 16:57 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms 123йй, тут это и так очевидно глядя на код. В уме представь как будет проходить запрос в целом. В идеале сделать както джойном но чтоб учитывались не все а хотябы одно вхождение дочерней таблицы. Таблицы огроменные, и вариант с подзапросами на каждую строку не вариант ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 17:10 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms Таблицы огроменные сравните результаты по факту, и огласите результаты,с учетом авторв запросе мне надо запросить только список названий групп и их ИД если ид и ид_ref проиндексированы время должно быть приемлемо зы оракля не обязан "на каждую строку в выборке делать подзапрос" .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 17:22 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
kmskmskms У SY последний пример тоже плох, с подзапросом на каждую запись Оптимизатор в большинстве случаев выберет тот-же план что с EXISTS что с IN: Код: plsql 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.
Код: plsql 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.
И как видишь таблица в subquery читается один раз. И на большой таблице это может быть не оптимально. Оптимальней может быть индекс на EMP.DEPTNO (PRODUCT_TYPES.GROUP_ID) и NESTED LOOPS SEMI. Т.е. ползем по PRODUCT_GROUPS и для каждой её строки просто проверяем индекс на PRODUCT_TYPES.GROUP_ID. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 18:10 |
|
найти записи которым есть соответствие
|
|||
---|---|---|---|
#18+
SY И на большой таблице это может быть не оптимально. В таких простых случаях, для большой ведомой таблицы, у оптимизатора на 100% хватит ума не сваливаться в сортировку большой таблицы, да и в джойн тоже. Вполне сам переставит источники соединения, и сам превратит в фильтр, по крайней мере, для exists Имхо, человеку с такими представлениями о том, что хорошо, а что плохо, как у топикстартера, глубоко преждевременно что-то про оптимальность рассказывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 18:34 |
|
|
start [/forum/topic.php?fid=52&msg=40130808&tid=1879554]: |
0ms |
get settings: |
28ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
311ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 436ms |
0 / 0 |