我有 7 张表,其中一张是主列表,另外 6 张是档案。此外,档案位于另一个数据库中。我需要通过检查主表中未列出的 3 个不同的列 ID(顶部、中间、底部)来检查存档表并删除行,因为它们不再相关。我的 SQL 语句如下。我还没有办法对其进行测试,但是由于我对 SQL 不是很熟悉,我希望人们可以提供一些提示。
String[] tables;
tables = new String[]{"archive1", "archive2", "archive3",
"archive4", "archive5", "archive6"};
String query;
Statement stmt;
String objs = "TOP AND MIDDLE AND BOTTOM";
while(i<tables.length){
//TODO: CONFIRM THE QUERY IS CORRECT
query = "DELETE FROM "+ tables[i] + " WHERE "+ objs +
"NOT IN(SELECT " + objs + " FROM DB.masterTable WHERE " +
objs + " IS NOT NULL)";
//IS NOT NULL may not be necessary
try{
//TODO: VERIFY CONNECTION IS CORRECT
stmt = this.DB2.createStatement();
stmt.executeUpdate(query);
}catch(SQLException x){
System.out.println("Failure in loop queries!");
}
i++;
}
}
在表格中有很多列,但我关心的是比较顶部、中间和底部的 ID(它们对每一行都是唯一的,但例如顶部可能有许多相同的值)。所以就像我说的,如果在主表 OBJECTS 中没有具有相同 TOP、MIDDLE、BOTTOM 的行,那么可以从列出它的存档中删除该行。我试图将所有内容放在一个查询中,但也许我需要多个?
我的主要问题是:A)我的查询在任何意义上都正确吗?B)由于表位于 2 个不同的数据库上,我应该如何处理?
找到的解决方案:
query = "DELETE FROM "+ tables[i] +
" WHERE (TOP, MIDDLE, BOTTOM) NOT IN "+
"(SELECT TOP, MIDDLE, BOTTOM FROM DB1.DB.masterTable)";
主要问题变成弄清楚如何一次比较每行的所有 3 个字段并访问数据库表