|
|
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
Вопрос наверное странный, но я не удивлюсь, если в MySQL и такое есть... К примеру есть таблица `Table` с одним полем `NumRec` (не автоинкремент). Три записи: 23 24 25 Запрос: SELECT `NumRec` FROM `Table` WHERE `NumRec` In(23,30,31); вернёт одну запись `NumRec`=23. Мне нужно определить наоборот - каких `NumRec` в таблице ещё нет (чтобы их добавить). Т.е. нужен такой запрос, который вернёт 2 записи: `NumRec`=30, `NumRec`=31. Возможно ли такое вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 15:13:00 |
|
||
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
Алексей Смирнов, например так: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 20:23:31 |
|
||
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
Arhat109, пардон, случайно на Enter нажал до проверки. Правильно так: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 20:25:03 |
|
||
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
Алексей Смирнов, получить результат одной командой (не считая запуска ХП) врядли получится, но предлагаю такую последовательность: Я догадываюсь, что содержимое скобок для оператора IN вы генерируете в текстовом виде внутри вашего приложения, поэтому 1) создайте на время сессии (или на лету) временную табличку с одним полем для хранения ваших NumRec; 2) добавьте в нее строки, содержащие все испытуемые NumRec из списка оператора IN. Это можно сделать одним инсертом Код: sql 1. ; 3) сделайте Селект пересечения вашей 'Table' и временной таблицы, выбрав только строки, в которых TempTable.NumRec есть, а Table.NumRec нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 20:38:36 |
|
||
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
А вот и Arhat109 тоже самое предложил, только вместо временной таблицы делает набор строк с помощью UNION. Какой из вариантов будет быстрее, эффективнее по ресурсам и удобнее в работе - вам решать в зависимости от условий вашего приложения.Мень заморочек конечно в варианте Архата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 20:43:50 |
|
||
|
Как получить список несуществующих записей
|
|||
|---|---|---|---|
|
#18+
Arhat109, Kulavert, спасибо, да хорошие ответы. Оба этих варианта у меня крутились в голове. Вариант со второй табличкой конечно лучше тем, что строка запроса в этом случае будет не такой громоздской, как в первом варианте (т.е. записей может быть и несколько сотен). Просто думал, может авторы MySQL все же придумали какую-нибудь конструкцию... чтобы SELECT мог сам генерировать несуществующие записи. Вообще мне это нужно, чтобы синхронизировать записи базы формата Microsoft Access и MySQL, а именно через какой-то промежуток времени новые данные подгружать в MySQL. Вариант Arhat109 громоздский, т.к. таблиц и записей в базе очень много. Вариант Kulavert получше, но все равно создавать в MySQL ID всех записей всех таблиц так же слишком громоздско. Решил в каждой таблице базы MDB создать поле, в котором будет сохраняться признак - добавлена ли эта запись в базу MySQL. Если False, значит добавляем. Единственный выход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 21:33:33 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38484630&tid=1835625]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 399ms |

| 0 / 0 |
