Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6088
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как фильтровать по 2 полям при загрузке данных в таблицу базы данных access из электронной таблицы excel
Хорошо, вот моя проблема, не будучи слишком конкретным по причинам увольнения за размещение практики компании в интернете.
Есть электронные таблицы сделаны. Они загружаются в базу данных. Мне нужно отфильтровать дубликаты от загрузки. Единственный способ сделать это-убедиться, что для каждой записи эти два поля не совпадают с записью, уже находящейся в базе данных. Поскольку просто потому, что одно поле такое же, это не означает, что его дубликат. Есть два конкретных поля, давайте назовем их FLDA и FLDB, которые оба должны соответствовать записи в базе данных уже. Я уже могу фильтровать по одному полю. Я думаю, что это должен быть подзапрос, но я не уверен, как его применить. Это трудно описать. Просто спросите, если вы не уверены, что я имею в виду.
Подойдет ли запрос? Например:
INSERT INTO ToUpdate ( Field1, Field2 )
SELECT e.H1, e.H2
FROM (SELECT * FROM [Sheet1$] IN '' [Excel 8.0;HDR=YES;IMEX=1;database=C:\Docs\LTD.xls]) As e
LEFT JOIN ToUpdate ON (e.H2 = ToUpdate.Field2) AND (e.H1 = ToUpdate.Field1)
WHERE ToUpdate.Field1 Is Null AND ToUpdate.Field2 Is Null
Основываясь на ответе CodeSlave, Access предоставляет мастер поиска дубликатов запроса, который может помочь вам легко построить запрос, чтобы отсеять дубликаты.
Другой подход заключается в том, чтобы установить идентичность на FLDA и FLDB. Это позволит предотвратить даже запись в таблицу повторяющихся записей. Конечно, вам также нужно будет поймать исключение, которое возникает при сбое операции вставки.
Как вы загружаете их в базу данных? Это с вашим собственным кодом для чтения файлов Excel? Вы можете прочитать файлы Excel, используя ADO/ADO.NET с правильной строкой подключения . Тогда вы могли бы прочитать данные с помощью запроса, который отсеял бы дураков.
Есть ли поле FLDC, которое отличалось бы для идентификации дубликатов? Я предполагаю, что это должно быть, так как в противном случае наличие (FLDA,FLDB) в качестве уникального или первичного ключа немедленно решит вашу проблему.
Предполагая, что такое поле существует, вы можете попробовать что-то вроде этого:
SELECT T1.FLDA, T1.FLDB, T1.FLDC
FROM Table1 T1, Table1 T2
WHERE T1.FLDA = T2.FLDA
AND T1.FLDB = T2.FLDB
AND T1.FLDC <> T2.FLDC
Недостатком здесь является то, что и оригинал, и дубликат будут возвращены чем-то вроде этого. Если вы хотите видеть только дубликаты, вам, вероятно, придется найти способ идентифицировать строку 'original' и добавить еще одно или два предложения WHERE для этого.
Если вы можете получить запрос, который дает вам только дубликаты строк, а не оригиналы, его будет довольно легко изменить на запрос DELETE.
Чтобы избежать дублирования при импорте:
1-Если на столе еще нет первичного ключа, поместите его на FLDA и FLDB (вместе). Если уже есть первичный ключ, который не является FLDA и FLDB (вместе), поместите индекс в таблицу для этих двух полей: unique yes, ignore nulls no.
2-Вы можете импортировать данные из электронной таблицы в таблицу с помощью мастера или запроса. Если вы сделаете это с помощью мастера импорта электронных таблиц, вы увидите это сообщение перед началом импорта:
"DB name не удалось добавить все данные в таблицу.
"Содержимое полей в 0 записях было удалено и (xx) записи были потеряны из-за ключевых нарушений. (Эти потерянные записи были дубликатами, так что никаких реальных потерь там не было.) ... Вы все равно хотите продолжить?"
Нажмите кнопку Да, чтобы импортировать строки из электронной таблицы. Никакие дубликаты не будут импортированы.
Или, чтобы использовать запрос для импорта, вставьте его в новый запрос в представлении sql (меню: Вставка > запрос > представление конструктора, кнопка закрытия; меню: Вид > представление SQL.)
INSERT INTO tblInput
SELECT XLS.*
FROM tblInput AS T RIGHT JOIN
[Excel 8.0;IMEX=1;HDR=Yes;DATABASE=c:\data.xls;].[Sheet1$] AS XLS
ON T.FLDA = XLS.FLDA AND T.FLDB = XLS.FLDB
WHERE ISNULL(T.FLDA) AND ISNULL(T.FLDB);
Измените путь, c:\data.xls, на свой путь, Sheet1$-на имя листа, tblInput-на имя таблицы, а FLDA и FLDB-на имена столбцов. Если в электронной таблице нет заголовков (имен столбцов), измените HDR=Yes на HDR=No