Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие СУБД > Отбор данных в двух таблицах dbf


Автор: ivan2222 3.11.2016, 09:19
Здравствуйте, помогите пожалуйста, есть 2 таблицы формата dbf с одинаковыми полями, требуется написать запрос что бы данные из одной таблицы отбирались в другой а лишнее удалялось, что бы отбор был по 3 столбцам.
таблицы это список жителей города,
нужно отобрать по номеру страхового пенсионного, по категории льготника и по закрытой или открытой лготной категории тип N - открытая, или D - закрытая
два файла формат файлов dbf, столбцы pfr, cat_id, type_open. тип полей Character. 
нужно что бы данные в первом файле остались теже что и во втором а лишние в первом файле удалились, отбор должен быть по 3 столбцам
Запрос будет выполняться в Database Explorer

Автор: Akina 3.11.2016, 09:43
Код

DELETE t1.*
FROM t1
LEFT JOIN t2
  ON  t1.field1=t2.field1 
  AND t1.field2=t2.field2
-- ...
WHERE t2.id IS NULL 

Автор: ivan2222 3.11.2016, 09:59
Я прошу прощения за вопрос field1 это название файла, а t1 - это столбца? 

Автор: Akina 3.11.2016, 10:55
Угу... только наоборот.

Автор: ivan2222 3.11.2016, 11:10
Как на оборот?

Добавлено через 1 минуту и 8 секунд
А куда вписывать название столбца?

Автор: Akina 3.11.2016, 11:38
Цитата(ivan2222 @  3.11.2016,  12:10 Найти цитируемый пост)
куда вписывать название столбца? 

Это в Экселе столбцы. А в терминах баз данных это называется "поле". А по-буржуйски - field.

Автор: ivan2222 3.11.2016, 11:47
Получается для второго значения нужно после
WHERE t2.id IS NULL
вставить то же самое только для второго значения?

Автор: Akina 3.11.2016, 13:04
Что такое "второе значение"?
 В шаблоне однозначно указано, куда надо вносить корректировки.

Автор: ivan2222 3.11.2016, 14:50
Я имею ввиду куда вписывать название полей pfr, cat_id, type_open?

Автор: Akina 3.11.2016, 15:19
Цитата(ivan2222 @  3.11.2016,  15:50 Найти цитируемый пост)
куда вписывать название полей pfr, cat_id, type_open? 

Так вроде выбора-то нет, всё слишком однозначно... не расстраивай.

Автор: ivan2222 3.11.2016, 15:26
Я прошу прощения подскажи пожалуйста куда вписывать названия полей? Я что то не понял.

Автор: ivan2222 7.11.2016, 08:29
Подскажите пожалуйста куда вставлять названия полей таблиц?

Автор: ivan2222 7.11.2016, 13:04
Я как понял получается так 

DELETE org_out_2016_1.*
FROM org_out_2016_1
LEFT JOIN org_out_2016_2
  ON  org_out_2016_1.pfr=org_out_2016_2.pfr 
  AND org_out_2016_1.cat_id=org_out_2016_52.cat_id
  AND org_out_2016_1.type_open=org_out_2016_52.type_open
WHERE org_out_2016_2.id IS NULL 


Автор: Akina 7.11.2016, 15:02
Похоже. Только в условии связывания у тебя лишние пятёрки...

Автор: ivan2222 18.11.2016, 12:04
Подскажите а возможно ли это осуществить в программе написаной в делфи? Я не очень разбираюсь в программировании, помогите пожалуйста!

Автор: Akina 18.11.2016, 12:05
Какая разница, на чём написано приложение? можно, есссно.

Автор: ivan2222 18.11.2016, 12:21
тоесть и без программы запрос будет работать?

Автор: ivan2222 18.11.2016, 12:49
как я понял такой запрос удаляет строки в которых нет какого либо поля из этих 3 по которым осуществляется отбор?

Автор: ivan2222 18.11.2016, 13:10
Запрос почему то на первой строчке выдает ошибку Invalid use of keyword.

Автор: Akina 18.11.2016, 13:30
Цитата(ivan2222 @  18.11.2016,  14:10 Найти цитируемый пост)
на первой строчке выдает ошибку Invalid use of keyword. 

Сообщение об ошибке следует цитировать ПОЛНОСТЬЮ. А заодно рассказывать, где и как именно запрос запускается на исполнение.

Автор: ivan2222 18.11.2016, 13:40
Запрос запускается в Database Explorer 
Полное сообщение ошибки 
Invalid use of keyword.
Token org_out_2016_1
FROM
Line Number: 1

Автор: Akina 18.11.2016, 13:44
Возможно, нужно использовать просто синтаксис без указания, из какой таблицы выполняется удаление. Просто DELETE FROM и далее по тексту. Но лучше почитать справку по Database Explorer - ну чтобы случайно не угрохать записи из обеих таблиц.

Автор: ivan2222 18.11.2016, 15:18
Удаление из первой таблицы, а данные из второй остаются в первой.

Автор: ivan2222 21.11.2016, 08:37
Подскажите, как это сделать?

Автор: ivan2222 21.11.2016, 09:53
Подскажите, это как синтаксис без указания из какой таблицы?

Добавлено через 7 минут и 34 секунды
Дак как получится удаление если не указать от куда?

Автор: ivan2222 21.11.2016, 11:03
Убрал после delet название таблицы теперь та же ошибка на LEFT в третей строке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)