MS-Access: Eliminación de todas las filas excepto por la parte superior 1 y la actualización de una tabla de una consulta

StackOverflow https://stackoverflow.com/questions/897780

  •  23-08-2019
  •  | 
  •  

Pregunta

Ya casi termino con esto, sólo unos últimos hipo. Ahora necesito borrar todos los registros de una tabla a excepción de la parte superior, donde 1 es la columna readings_miu_id "distinta". En otras palabras, palabras que necesito para borrar todos los registros de una tabla que no sea la primera readings_miu_id distintas. Estoy asumiendo que todo lo que necesita hacer es modificar la instrucción de eliminación básica:

DELETE FROM analyzedCopy2
WHERE readings_miu_id = some_value

Pero no puedo encontrar la manera de cambiar la parte some_column = some_value a algo como:

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

y luego tengo que encontrar la manera de utilizar una instrucción UPDATE para actualizar una tabla (analyzedCopy2) de una consulta (que es donde todos los valores que desea almacenar en la columna de RSSI en analyzedCopy2 tabla se encuentran en la actualidad). He intentado esto:

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

pero al parecer no puedo usar desde el interior de una instrucción de actualización. ¿Alguna idea?

Estoy seguro de que voy en esto un muy no estándar (y, posiblemente, si no es probablemente el plano erróneas) camino, pero no estoy siendo permitido el uso de vb.net2008 para tirar y manipular a continuación, almacenar los datos como yo le gustaría, así que estoy atascado en este momento utilizando sentencias SQL en MS-Access, que es una buena experiencia de aprendizaje (Incluso si tratamos de hacer este tipo de cosas extrañas que he tenido que hacer en sentencias SQL que me está haciendo golpeo mi cabeza contra mi mazo en sentido figurado, por supuesto )

¿Fue útil?

Solución

declaraciones SQL de actualización de MS Access no pueden hacer referencia a las consultas, sino que pueden hacer referencia a tablas. Así que lo que hay que hacer es almacenar los resultados de la consulta en una tabla.

SELECT YourQuery.* 
INTO TempTable1
FROM YourQuery

Ahora puede utilizar TempTable1 en una consulta UPDATE:

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

mi respuesta a esta pregunta .

Otros consejos

No tengo una copia de acceso en esta máquina, y ha sido un par de años desde que incursionó en el acceso, por lo que estoy tomando una puñalada salvaje aquí, pero puedo hacer un

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

(necesitará el fin de conseguir el correcto registro superior 1, ordenado por el id tal vez?)

No tengo la esperanza de que le ayuda con el segundo sin una copia de acceso. Sé lo que lo haría en TSQL, pero el acceso es harina de otro conjunto de wtf de: -)

Yo estaba tratando de hacer demasiado complicado, ya que todos los registros que necesitaba para tirar tenían la misma información en cada campo que necesitaba todo lo que tenía que hacer era uso:

   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;

con el fin de tirar de la parte superior 1 registro por readings_miu_id.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top