|
select from
|
|||
---|---|---|---|
#18+
Ребят, подскажите, пожалуйста, в чем ошибка. Уже голову сломал. Написал элементарный запрос: SELECT Reevypdlo.dat_vyp, Reevypdlo.sn_lr, Reevypdlo.med, Reevypdlo.kol; FROM reevypdlo, adlo; WHERE Reevypdlo.sn_lr <> adlo.recept Foxpro9 выдает ошибку: file 1111.tmp is too large. Но, если: SELECT Reevypdlo.dat_vyp, Reevypdlo.sn_lr, Reevypdlo.med, Reevypdlo.kol; FROM reevypdlo, adlo; WHERE Reevypdlo.sn_lr = adlo.recept то запрос норм получается. Та же ситуация, если делать через inner join. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2011, 16:58 |
|
select from
|
|||
---|---|---|---|
#18+
Так ведь ясно же прямо английским языком и написано, что результат получается слишком большим. Системное ограничение FoxPro на таблицы DBF: 1 миллиард записей или 2ГБ объема. Вот по какой-то из этих характеристик и вылетел за границы. У тебя же условие объединения Reevypdlo.sn_lr <> adlo.recept, что означает, по сути, перемножение количества записей в первой таблицы на количество записей во второй. За небольшим исключением тех записей, коды которых совпадают. Т.е. если, например, в обоих таблицах по 1 тысяче записей и связь между ними один-к-одному, то в результате условия связи по не равенству в результирующей выборке получим: 1000*1000-1000-1000 = 998000. Напиши словами, что именно надо получить. Может, подскажут какой именно запрос надо написать без необходимости в декартовом произведении записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2011, 17:18 |
|
select from
|
|||
---|---|---|---|
#18+
Ну нужно выбрать записи из таблицы Reevypdlo, где поле Reevypdlo.sn_lr не равно полю adlo.recept в таблице Reevypdlo. Формат полей одинаковый (c20) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2011, 17:25 |
|
select from
|
|||
---|---|---|---|
#18+
ОлегОлегОлегНу нужно выбрать записи из таблицы Reevypdlo, где поле Reevypdlo.sn_lr не равно полю adlo.recept в таблице Reevypdlo. Формат полей одинаковый (c20) Этого недостаточно. Предположим у тебя такие данные Reevypdlo.sn_lr AA BB CC adlo.recept AA DD EE Берем первую запись из таблицы Reevypdlo. Значение AA равно значению в первой записи таблицы adlo, но не равно значению во второй и третьей записи таблицы adlo. Так вот, надо ли чтобы запись из таблицы Reevypdlo со значение AA вообще не попала в итоговую выборку или попала 2 раза? Ведь ее нет для 2 записей таблицы adlo. Если интересует первый вариант, то он решается через NOT EXISTS() или NOT IN () Код: plaintext 1. 2.
или так Код: plaintext 1. 2.
С точки зрения производительности оба варианты практически одинаковые. Какой из них выбрать - вопрос личных предпочтений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2011, 17:36 |
|
|
start [/forum/topic.php?fid=41&msg=37311544&tid=1584310]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 135ms |
0 / 0 |