|
|
|
Запрос в запросе работает неправильно, где ошибка?
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, может кто сталкивался и сможет помочь. Только, извините, предупреждаю - я начинающий, ругаться сразу не надо и попроще, пожалуйста. Существует вот такой запрос с подчиненным запросом на удаление записей из связанной таблицы: DELETE [DCLHEAD XP old].G071, [DCLHEAD XP old].G072, [DCLHEAD XP old].G073 FROM [DCLHEAD XP old] WHERE ((([DCLHEAD XP old].G071) In (SELECT [Новые ГТД].G071 FROM [Новые ГТД])) AND (([DCLHEAD XP old].G072) In (SELECT [Новые ГТД].G072 FROM [Новые ГТД])) AND (([DCLHEAD XP old].G073) In (SELECT [Новые ГТД].G073 FROM [Новые ГТД]))) WITH OWNERACCESS OPTION; В результате запрос пытается удалить (выбрать -в данном случае это не важно) большее количество записей из DCLHEAD XP old чем их есть в Новые ГТД, а именно: если поле G073 совпадает то он данную запись удаляет (выбирает) при том что поля G071 и G072 не совпадают, то есть это другая запись. Одназначно запись определяется по трем полям G071, G072, G073. Получается что в результате запроса часть записей удаляется правильно - все три поля совпадали с "Новые ГТД" а часть нет - с "Новые ГТД" совпадало только поле G073. В чем глюк? Или я дурак? База mdb, связанная таблица DCLHEAD XP old в которой должно происходить удаление тоже в базе mdb. Access2002 +SP3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2004, 13:03:06 |
|
||
|
Запрос в запросе работает неправильно, где ошибка?
|
|||
|---|---|---|---|
|
#18+
Ау! Умные головы - неужели ни у кого никаких мыслей по данному поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2004, 14:09:23 |
|
||
|
Запрос в запросе работает неправильно, где ошибка?
|
|||
|---|---|---|---|
|
#18+
AndrewPoker Пожалуйста, может кто сталкивался и сможет помочь. Только, извините, предупреждаю - я начинающий, ругаться сразу не надо и попроще, пожалуйста. Существует вот такой запрос с подчиненным запросом на удаление записей из связанной таблицы: DELETE [DCLHEAD XP old].G071, [DCLHEAD XP old].G072, [DCLHEAD XP old].G073 FROM [DCLHEAD XP old] WHERE ((([DCLHEAD XP old].G071) In (SELECT [Новые ГТД].G071 FROM [Новые ГТД])) AND (([DCLHEAD XP old].G072) In (SELECT [Новые ГТД].G072 FROM [Новые ГТД])) AND (([DCLHEAD XP old].G073) In (SELECT [Новые ГТД].G073 FROM [Новые ГТД]))) WITH OWNERACCESS OPTION; В результате запрос пытается удалить (выбрать -в данном случае это не важно) большее количество записей из DCLHEAD XP old чем их есть в Новые ГТД, а именно: если поле G073 совпадает то он данную запись удаляет (выбирает) при том что поля G071 и G072 не совпадают, то есть это другая запись. Одназначно запись определяется по трем полям G071, G072, G073. Получается что в результате запроса часть записей удаляется правильно - все три поля совпадали с "Новые ГТД" а часть нет - с "Новые ГТД" совпадало только поле G073. В чем глюк? Или я дурак? База mdb, связанная таблица DCLHEAD XP old в которой должно происходить удаление тоже в базе mdb. Access2002 +SP3 ДЫк вы ж удаляете не по одновременному совпадению 3-х полей, а по наличию всех значений трех полей в различных выборках из [Новые ГТД]. В вашем случае по совпадению одновременно 3-х например: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2004, 14:27:02 |
|
||
|
Запрос в запросе работает неправильно, где ошибка?
|
|||
|---|---|---|---|
|
#18+
4321 - огромное персональное спасибо. Вы были абсолютно правы. Я задом то тоже чуйствую что именно так и происходит: удаляется не по одновременному совпадению 3-х полей, а по наличию всех значений трех полей в различных выборках из [Новые ГТД], а вот описать это условие одновременного совпадения не знал. Сделал как Вы подсказали: DELETE Exists (SELECT * FROM [Новые ГТД] AS G WHERE [DCLHEAD XP old].G071 = G.G071 AND [DCLHEAD XP old].G072 = G.G072 AND [DCLHEAD XP old].G073 = G.g073) AS Выражение1, * FROM [DCLHEAD XP old] WHERE (((Exists (SELECT * FROM [Новые ГТД] AS G WHERE [DCLHEAD XP old].G071 = G.G071 AND [DCLHEAD XP old].G072 = G.G072 AND [DCLHEAD XP old].G073 = G.g073))<>False)) WITH OWNERACCESS OPTION; Спасибо. Теперь работает правильно, удаляется то что надо и ничего лишнего. Но!!! Работает очень медленно. А нельзя как-либо сделать тоже самое, но быстрее. (Пожалуста, купить новый камень или увеличить ОЗУ не предлагать :-)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2004, 15:14:24 |
|
||
|
Запрос в запросе работает неправильно, где ошибка?
|
|||
|---|---|---|---|
|
#18+
AndrewPoker4321 - огромное персональное спасибо. Вы были абсолютно правы. Я задом то тоже чуйствую что именно так и происходит: удаляется не по одновременному совпадению 3-х полей, а по наличию всех значений трех полей в различных выборках из [Новые ГТД], а вот описать это условие одновременного совпадения не знал. Сделал как Вы подсказали: DELETE Exists (SELECT * FROM [Новые ГТД] AS G WHERE [DCLHEAD XP old].G071 = G.G071 AND [DCLHEAD XP old].G072 = G.G072 AND [DCLHEAD XP old].G073 = G.g073) AS Выражение1, * FROM [DCLHEAD XP old] WHERE (((Exists (SELECT * FROM [Новые ГТД] AS G WHERE [DCLHEAD XP old].G071 = G.G071 AND [DCLHEAD XP old].G072 = G.G072 AND [DCLHEAD XP old].G073 = G.g073))<>False)) WITH OWNERACCESS OPTION; Спасибо. Теперь работает правильно, удаляется то что надо и ничего лишнего. Но!!! Работает очень медленно. А нельзя как-либо сделать тоже самое, но быстрее. (Пожалуста, купить новый камень или увеличить ОЗУ не предлагать :-)))) пжалста, но ничо не понял предлагал так: Код: plaintext 1. 2. 3. 4. 5. 6. (G071,G072,G073) - должно сильно поднять скоростенку. если надо еще быстрее чем это - надо подумать. Но id-то хоть у [DCLHEAD XP old] какой никакой есть? покумекайте над открытием двух рекордсетов: 1-й - Код: plaintext 1. 2. 3. 4. 2-й - табличный (открывайте в базе-источнике) [DCLHEAD XP old] , dbOpenTable, .Index = "PrimaryKey" 'т.е. по id и гоните по первому простым перебором - по второму - seek-ом + во втором делайте DELETE. Не думаю, что есть шансы обогнать джет, но вполне вероятно. (Exists он делает в каждом запросе, без индекса это долго) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2004, 17:28:05 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1525&tid=1670395]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 307ms |

| 0 / 0 |
