|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
Добрый день, форумчане! Возникла задачка сделать выборку записей, на которые ни кто (ни какая другая таблица) не ссылается... сначала, хотел сделать как обычно: Код: sql 1. 2. 3.
проблема только в том, что таблиц, подобных ref_tab1 несколько десятков. Вопрос: есть-ли какой-то более хитрый (оптимальный) способ, сделать подобную выборку, способ доступный для использования в простом запросе. БД: IBM Informix Dynamic Server Version 11.50.FC9 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2014, 12:12 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
NetSpiderсделать выборку записей, на которые ни кто (ни какая другая таблица) не ссылается... таблиц, подобных ref_tab1 несколько десятков... другого способа нет, кроме как обойти все эти detail-таблицы Код: sql 1. 2. 3. 4. 5.
или Код: sql 1. 2. 3. 4. 5.
Если никакой другой задачи не стоит, кроме как выбрать - этого селекта будет достаточно. Другой вопрос - как определить эти несколько десятков detail-таблиц, которые ссылаются на эту таблицу. Можно начать примерно с такого запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
get_join_str - это функция, возвращающая строку соединения Код: sql 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2014, 15:01 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
Большое спасибо за ответ! Обошелся exists'ами, благо список ссылающихся таблиц определить трудностей не составило. Только выполнять пришлось не весь запрос разом (чтобы не ждать его выполнения пол дня), а разделить на неск. частей прогоняя через вр. таблицы. Отдельное спасибо за процедурку!)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 11:59 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
select * from main_tab a left outer join second_t b on a.f=b.f left outer join third_t c on a.f=c.f where b.f is null and c.f is null a b c 1 1 1 2 2 2 3 3 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:05 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
Журавлев Денисselect * from main_tab a left outer join second_t b on a.f=b.f left outer join third_t c on a.f=c.f where b.f is null and c.f is null a b c 1 1 1 2 2 2 3 3 4 хм... тоже интересный вариант, попробовал на неск. таблицах - даже вроде как быстрее)) Спасибо за подсказку! Перейдя на информикс совсем стал забывать про *join*, хотя не думаю, что тут виноват информикс)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:03 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
NetSpiderПерейдя на информикс совсем стал забывать про *join*, хотя не думаю, что тут виноват информикс)) я предлагал один запросом заджойнить все таблицы, чтобы в main_tab зайти один раз. по идее в идеальном сферическом оптимизаторе это ничем не отличается от варианта select * from main_tab m where not exists (select r.key_id from ref_tab1 r where r.key_id = m.key_id) and not exists (select r.key_id from ref_tab2 r where r.key_id = m.key_id) and not exists (select r.key_id from ref_tab3 r where r.key_id = m.key_id) and not exists (select r.key_id from ref_tab4 r where r.key_id = m.key_id) and ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:02 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
NetSpider Перейдя на информикс совсем стал забывать про *join*, хотя не думаю, что тут виноват информикс)) кажись "родной" синтаксис информикса не позволяет пометить предикат post-join или pre-join поэтому без анси-ситаксиса не обойтись ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:05 |
|
Простой способ определения наличия ссылок?
|
|||
---|---|---|---|
#18+
Журавлев ДенисNetSpiderПерейдя на информикс совсем стал забывать про *join*, хотя не думаю, что тут виноват информикс)) кажись "родной" синтаксис информикса не позволяет пометить предикат post-join или pre-join поэтому без анси-ситаксиса не обойтись Используя Informix-Extension Outer Joins, результата, подобного ANSI-join, добиться не удалось, что в принципе, не удивительно... Так что - да, либо без join'ов либо ansi Если я Вас правильно понимаю)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 12:21 |
|
|
start [/forum/topic.php?fid=44&msg=38711958&tid=1606938]: |
0ms |
get settings: |
25ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
190ms |
get tp. blocked users: |
1ms |
others: | 36ms |
total: | 321ms |
0 / 0 |