Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Insert SQL / 23 сообщений из 23, страница 1 из 1
18.04.2012, 14:27
    #37759112
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Есть такая конструкция:

INSERT INTO (_mt) (stroka, docum) SELECT stroka, docum FROM (_vx) dist

Проблема в том, что при этом Select сортирует выборку. А как сделать не повторяющуюся выборку без сортировки?

Конструкции типа Scan ... Ends не предлагать.
...
Рейтинг: 0 / 0
18.04.2012, 14:33
    #37759133
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamis,

Ну, наверное, в _vx отсортированы
...
Рейтинг: 0 / 0
18.04.2012, 14:36
    #37759141
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisЕсть такая конструкция:

INSERT INTO (_mt) (stroka, docum) SELECT stroka, docum FROM (_vx) dist
Проблема в том, что при этом Select сортирует выборку. А как сделать не повторяющуюся выборку без сортировки?

Конструкции типа Scan ... Ends не предлагать.

Если dist - это DISTINCT, то походу он не в том месте стоит
...
Рейтинг: 0 / 0
18.04.2012, 14:39
    #37759151
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
IgorNGglamis,

Ну, наверное, в _vx отсортированы

Нет. Если выполнить Select без dist на глаз видно, что dist сортирует.
...
Рейтинг: 0 / 0
18.04.2012, 14:41
    #37759158
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamis,

DISTINCT выбирает уникальные записи! Но никак не сортирует
...
Рейтинг: 0 / 0
18.04.2012, 14:45
    #37759167
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamis,

[ALL | DISTINCT]
Определяет выборку в результирующий набор Запроса Всех (ALL) записей (по-умолчанию); или исключая дублируюемые записи данных (DISTINCT). Опция DISTINCT может быть использована только с первой секцией SELECT.
...
Рейтинг: 0 / 0
18.04.2012, 15:15
    #37759224
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
IgorNGglamis,

[ALL | DISTINCT]
Определяет выборку в результирующий набор Запроса Всех (ALL) записей (по-умолчанию); или исключая дублируюемые записи данных (DISTINCT). Опция DISTINCT может быть использована только с первой секцией SELECT.

Попробуй сам
...
Рейтинг: 0 / 0
18.04.2012, 16:52
    #37759464
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
IgorNGglamis,

DISTINCT выбирает уникальные записи! Но никак не сортируетДля получения уникальности делается неявная сортировка.
...
Рейтинг: 0 / 0
18.04.2012, 17:03
    #37759494
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
DISTINCT сортирует.
glamisКонструкции типа Scan ... Ends не предлагать.
Без них никак порядок не сохранишь. Теория языка SQL считает что все записи равнозначны и их порядок в выборке неважен, если не указан явно в ORDER BY.
...
Рейтинг: 0 / 0
18.04.2012, 17:46
    #37759637
Rand()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Используй Rand()
Допили вот это:
Код: sql
1.
INSERT INTO Cur1 (INN) SELECT inn FROM (Select Distinct inn,RAND() as R FROM a_tbl) T order by R
...
Рейтинг: 0 / 0
19.04.2012, 09:29
    #37760413
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Не факт, что rnd() будет выдавать значения по возрастанию. Была мысль использовать recn(), но похоже гемора становится больше, чем при scan. Вернее scan тож плохо. Луче
Do while !eof()
insert ... values
coun while ...
Endd
...
Рейтинг: 0 / 0
19.04.2012, 09:52
    #37760463
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
ХЗ чего там так плохо. Цикл SCAN ... ENDSCAN тоже самое что и
Код: sql
1.
2.
3.
4.
do while !eof()
...
   skip
enddo
...
Рейтинг: 0 / 0
19.04.2012, 10:44
    #37760554
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Dima T,

Есть разница. skip, а след-но и scan переходят на следующую запись, а конструкция Do while ... coun while пропускает несколько одинаковых.
...
Рейтинг: 0 / 0
19.04.2012, 10:59
    #37760592
Rand()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisНе факт, что rnd() будет выдавать значения по возрастанию.
При чем тут значения по возрастанию? Вопрос был о неупорядоченной выборке.
...
Рейтинг: 0 / 0
19.04.2012, 11:39
    #37760667
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Rand(),

rand() не спасает уже потому, что dist отрабатывает на все поля записи, таким образом КАЖДАЯ запись будет уникальна и смысл dist просто теряется.

В моем случае наработка записей производится по неким правилам блочно. Поэтому неотсортированные записи лежат в заранее заданном порядке, определяемом пользователем. Именно поэтому мне и не нужна сортировка. Иначе кому какое дело в каком порядке появились записи. И тем более было бы удобнее подсобрать записи одного типа вместе.
...
Рейтинг: 0 / 0
19.04.2012, 12:07
    #37760735
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamis,

Дык об чем спич-то??? Старым дедовским 2.0-способом:
Dima Tdo while !eof()
...
skip
enddo


Внутри проверяешь, есть ли уже такая запись в выходной таблице...
Ну и т.д. :)
glamisконструкция Do while ... coun while пропускает несколько одинаковых.
Это если они отсортированы, а так - не факт
...
Рейтинг: 0 / 0
19.04.2012, 12:16
    #37760748
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisDima T,

Есть разница. skip, а след-но и scan переходят на следующую запись, а конструкция Do while ... coun while пропускает несколько одинаковых.
coun while пропускает одинаковых только если они идут подряд.
Со сканом тоже самое можно так получить:
Код: sql
1.
2.
3.
4.
5.
lcRow = '!x!x!'
scan for lcRow != stroka + docum
    insert ....
    lcRow = stroka + docum
endscan
...
Рейтинг: 0 / 0
19.04.2012, 13:14
    #37760860
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Dima T,

такая конструкция не сработает. for просматривает всю таблицу
...
Рейтинг: 0 / 0
19.04.2012, 13:44
    #37760940
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisDima T,

такая конструкция не сработает. for просматривает всю таблицу
А select из первого поста не всю? SCAN WHILE ... начинает с текущего места.
Как понимаю у тебя еще куча всяких специфических моментов о которых ты промолчал. Тогда делай как тебе удобнее.
...
Рейтинг: 0 / 0
19.04.2012, 14:17
    #37761025
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisDima T,
такая конструкция не сработает. for просматривает всю таблицу
Такая конструкция должна быть внутри do while ... enddo
Читаешь запись и сканом проверяешь ее наличие в рез.таблице,
если не найдена - добавляешь
...
Рейтинг: 0 / 0
19.04.2012, 15:07
    #37761175
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
Dima TglamisDima T,

такая конструкция не сработает. for просматривает всю таблицу
А select из первого поста не всю? SCAN WHILE ... начинает с текущего места.
Как понимаю у тебя еще куча всяких специфических моментов о которых ты промолчал. Тогда делай как тебе удобнее.

Я ведь и говорил Scan не предлагать. А в SQL все по другому дет-ся

Jonny540 Такая конструкция должна быть внутри do while ... enddo
Читаешь запись и сканом проверяешь ее наличие в рез.таблице,
если не найдена - добавляешь
Ну и как вы будете определять след-ее искомое? В одной-то области, когда Scan for даст уже на первом проходе eof()?
...
Рейтинг: 0 / 0
19.04.2012, 15:21
    #37761224
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisЯ ведь и говорил Scan не предлагать. А в SQL все по другому дет-ся
Я к тому что сложно что-то советовать не зная всех условий задачи. Способ решения выбирается исходя из задачи.
Кроме SELECTа и SCANа еще варианты есть, и не только Do while
...
Рейтинг: 0 / 0
19.04.2012, 15:33
    #37761275
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert SQL
glamisНу и как вы будете определять след-ее искомое? В одной-то области, когда Scan for даст уже на первом проходе eof()?
Элементарно, после скана - go top. такая фигня уже давно работает. Хочешь код?
есть варианты с locate и seek (здесь в конце set order to)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Insert SQL / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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