1

我几乎完成了这个,只是最后的几个小问题。我现在需要从表中删除所有记录,除了前 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 语句从查询中更新表(analyzedCopy2)(这是我想要存储到表analyzedCopy2 中的RSSI 列中的所有值当前所在的位置)。我试过这个:

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 来拉取和操作然后像我想要的那样存储数据所以我现在被困在 ms-access 中使用 sql 语句,这是一个很好的学习体验(即使尝试做我在 sql 语句中必须做的奇怪的事情也让我用我的头来比喻我的甲板当然

4

3 回答 3

4

MS Access UPDATE sql 语句不能引用查询,但可以引用表。所以要做的就是将查询结果存储到一个表中。

SELECT YourQuery.* 
INTO TempTable1
FROM YourQuery

现在您可以在 UPDATE 查询中使用 TempTable1:

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

请参阅我对这个问题的回答

于 2009-05-22T15:11:55.127 回答
0

我在这台机器上没有访问权限的副本,而且我已经有几年没有涉足访问权限了,所以我在这里进行了一次疯狂的尝试,但是你能做一个吗?

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

(您需要 order by 才能获得正确的前 1 条记录,也许是按 id 排序?)

我没有希望在没有访问副本的情况下帮助您完成第二个。我知道我会如何在 TSQL 中做到这一点,但访问是一个完全不同的 wtf 水壶 :-)

于 2009-05-22T13:40:49.740 回答
0

我试图使过于复杂,因为我需要提取的所有记录在每个字段中都有相同的信息,我需要做的就是使用:

   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;

为了拉每个 readings_miu_id 的前 1 条记录。

于 2009-05-26T12:19:21.900 回答