嵌套SQL查询

时间:2018-04-27 19:57:21

标签: sql ms-access join

我有以下SQL查询。在这个查询中,我还加入了一个名为“unique”的访问查询表tblTestImport。我正在尝试将查询“unique”集成到下面的代码中。我没有运气,请帮忙。

DELETE tblTestImport.ID
FROM tblTestImport
WHERE tblTestImport.[ID]

in (SELECT tblTestImport.ID
FROM tblTestImport 
LEFT JOIN **[unique]**

ON tblTestImport.ID = **unique.**LastOfID

WHERE (((**unique.**LastOfID) Is Null)));

“唯一”查询的代码

SELECT Last(tblTestImport.ID) AS LastOfID
FROM tblTestImport
GROUP BY tblTestImport.Url, tblTestImport.Kms, tblTestImport.Price, tblTestImport.Time;

更多信息:我正在尝试从访问表中删除重复项,并仅保留唯一的重复项。 tblTestImport有重复的记录。 “唯一”查询显示唯一记录。然后,我使用“唯一”查询连接tblTestImport表,以确定tblTestImport中不存在哪些唯一记录。这给了我一个列表重复,我想删除。

在大块代码中,我有[唯一],我想用下面的一小段代码替换。

3 个答案:

答案 0 :(得分:1)

假设id永远不会NULL

,您的查询将不会返回任何结果

为什么呢? unique.lastOfId始终是tblTestImport中的有效ID。因此,LEFT JOIN将始终匹配,而lastOfId永远不会是NULL

因此,子查询中没有行。

我的建议是你问另一个问题。解释您想要做什么,并提供样本数据和期望的结果。

答案 1 :(得分:0)

根据您当前的问题设置,很难确切地说出您所追求的内容。但是,这可能是您正在寻找的:

List<String> filepaths = new ArrayList<String>("filepath1", "filepath2", "filepathMissing");

return pipeline
    .apply("GatherFiles", Create.of(filepaths)).setCoder(StringUtf8Coder.of())
    .apply("GatherFileData", TextIO.readAll().withEmptyMatchTreatment(EmptyMatchTreatment.ALLOW))        
    .apply("ApplyCustomDoFn", ParDo.of(new CustomDoFn()))
    .apply("Group", GroupByKey.<String, String>create())
    .apply("AnotherCustomDoFn", ParDo.of(new AnotherCustomDoFn()));

(这是上一个查询中的简单嵌套查询,但它都取决于数据本身的关系。此查询假定它们链接在相同的tblTestImport.ID字段上)

答案 2 :(得分:0)

尝试以下方法,未经测试:

DELETE FROM tblTestImport
WHERE ID <>  (SELECT Min(ID) AS MinOfID FROM tblTestImport AS Dupe      
   WHERE (Dupe.Url= tblTestImport.Url)                         
   AND (Dupe.Kms= tblTestImport.Kms)
   AND (Dupe.Price= tblTestImport.Price)
   AND (Dupe.Time= tblTestImport.Time)); 

基于以下http://allenbrowne.com/subquery-01.html

的解决方案