|
|
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
Как можно одним sql-оператором удалить из таблицы create table tb_test ( val integer, str varchar2(10) ); все дублирующиеся вхождения val , так чтобы оставить по одному вхождению. Это чисто теоретическая задача. И еще. Таже задача только без столбца str. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 13:33 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. 56. 57. Итого, запрос такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 13:59 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
delete from mz.tb_test b where b.val in (select a.val from mz.tb_test a where ((a.val=b.val) and (a.str>b.str))) Это если есть столбец str delete from mz.tb_test a where (select count(*) from mz.tb_test b where b.val=a.val)<>1 Это если этого столбца нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 15:25 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. "a.str>b.str" А вы подумали,что будет если в таблице значения столбца str будет совпадать? Код: plaintext 1. 2. В этом случае у вас удалятся все записи для тех записей для которых val повторяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 15:36 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
а разве не delete dup_emp where rowid not in ( select max(rowid) from dup_emp group by empno, ename, job, mgr, hiredate, sal, comm, deptno ); соответственно в gruop by перечисляется сочетание столбцов, уникальность которых надо остлеживать. Этот пример приводится вроде ещё в стандартном оракловском круса по SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 15:48 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
Тогда встаёт вопрос, что быстрее будет выполняться: Код: plaintext 1. или Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 16:03 |
|
||
|
SQL команда
|
|||
|---|---|---|---|
|
#18+
В таком случае можно и так DELETE FROM tb_test WHERE (val,str) IN ( SELECT val,str FROM ( SELECT VAL,STR,FIRST_VALUE(STR) OVER (PARTITION BY val) str_dop FROM tb_test WHERE val IN ( SELECT a.val FROM tb_test a GROUP BY a.val HAVING COUNT(a.val)>1 ) ) WHERE str<>str_dop ) если str заменить на rowid. Понятно , что это дольше, но проблема в том , что хотелось бы это сделать без ROWID. Кажется это невозможно, тогда надо этот вопрос задать MSSQL форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 16:50 |
|
||
|
|

start [/forum/search_topic.php?author=winini&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
80ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 694ms |
| total: | 872ms |

| 0 / 0 |
