MS-ACCESS: удаление всех строк, кроме первой, и обновление таблицы из запроса. - PullRequest
1 голос
/ 22 мая 2009

Я почти закончил с этим, только несколько последних икот. Теперь мне нужно удалить все записи из таблицы, кроме верхней 1, где readings_miu_id - это столбец «DISTINCT». Другими словами, мне нужно удалить все записи из таблицы, кроме первого DISTINCT readings_miu_id. Я предполагаю, что все, что мне нужно сделать, это изменить базовый оператор удаления:

DELETE FROM analyzedCopy2
WHERE readings_miu_id = some_value

Но я не могу понять, как изменить часть some_column = some_value на что-то вроде:

where some_column notequal to (select top 1 from analyzedCopy2 as A 
where analyzedCopy2.readings_miu_id = A.readings_miu_id)

и затем мне нужно выяснить, как использовать инструкцию UPDATE для обновления таблицы (analysisCopy2) из ​​запроса (именно там в настоящее время находятся все значения, которые я хочу сохранить в столбце RSSI в таблице analysisCopy2 таблицы). Я пробовал это:

UPDATE analyzedCopy2 from testQuery3 SET analyzedCopy2.RSSI = 
(select AvgOfRSSI from testQuery3 INNER JOIN  analyzedCopy2 on analyzedCopy2.readings_miu_id =  testQuery3.readings_miu_id where analyzedCopy2.readings_miu_id = testQuery3.readings_miu_id) 
where analyzedCopy2.readings_miu_id = testQuery3.readings_miu_id

но, очевидно, я не могу использовать FROM внутри оператора обновления. Есть мысли?

Я уверен, что я иду по этому очень нестандартному (и, возможно, если не возможно, ошибочному пути), но мне не разрешают использовать vb.net2008, чтобы извлекать и манипулировать, а затем сохранять данные, как я Я бы хотел, чтобы я застрял прямо сейчас, используя SQL-операторы в ms-access, что является хорошим опытом обучения (даже если попытка сделать такие странные вещи, которые мне приходилось делать в SQL-операторах, заставляет меня биться с головой моя колода образно конечно )

Ответы [ 3 ]

4 голосов
/ 22 мая 2009

Операторы SQL Access UPDATE SQL не могут ссылаться на запросы, но могут ссылаться на таблицы. Поэтому нужно сохранить результаты запроса в таблице.

SELECT YourQuery.* 
INTO TempTable1
FROM YourQuery

Теперь вы можете использовать TempTable1 в запросе ОБНОВЛЕНИЯ:

UPDATE TargetTable
INNER JOIN TempTable1 ON TempTable1.TargetTableId = TargetTable.Id
SET TargetTable.TargetField = TempTable1.SourceField

См. мой ответ на этот вопрос .

0 голосов
/ 26 мая 2009

Я пытался сделать слишком сложным, так как все записи, которые мне нужно было получить, содержали одинаковую информацию в каждом поле, и мне нужно было только использовать:

   SELECT DISTINCT readings_miu_id, DateRange, RSSI, ColRSSI, Firmware, CFGDate, FreqCorr, Active, OriginCol, ColID, Ownage, SiteID, PremID, prem_group1, prem_group2
FROM analyzedCopy2   
ORDER BY readings_miu_id;

, чтобы получить первую 1 запись в readings_miu_id.

0 голосов
/ 22 мая 2009

У меня нет копии доступа на этом компьютере, и прошло несколько лет с тех пор, как я баловался с доступом, поэтому я делаю дикий удар здесь, но вы можете сделать

delete from analyzedCopy2
where readings_miu_id not in (select top 1 readings_miu_id from analyzedCopy2 order by...)

(вам понадобится заказ по, чтобы получить правильную первую запись, возможно, по идентификатору?)

У меня нет надежды помочь вам со вторым без копии доступа. Я знаю, как я это сделаю в TSQL, но доступ - это совсем другой чайник WTF: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...