2017-03-02 44 views
0

我运行SQL Server 2012的遍历表中输入WHERE条件为删除查询

我有两个表:

表1 [DBO] .FilestoUpdate - 此文件记录,以测试重复:

[ID]  [A_number] 
1   A069467 
2   A078594 
3   A085473 
etc   etc 

表2包含我的所有数据: 我删除重复记录表2采用以下查询:

;WITH Vals AS (SELECT [A_number] 
    ,[Date] 
    ,[ZONE] 
    ,[MGA_N] 
    ,[MGA_E] 
    ,[MI_SQL_Y] 
    ,[MI_SQL_X] 
    ,[RL] 
    ,[SHEET_100K] 
    ,[SHEET_250K] 
    ,[Hole_ID] 
    ,[Sample_Group] 
    ,[Sample_No] 
    ,[Mesh_Size] 
    ,[Sample_Type] 
    ,[DEPTH] 
    ,[Au_ppb] 
    ,[Au_limit] 
    ,[Au_meth] 
    ,[Ag_ppm] 
    ,[Ag_limit] 
    ,[Ag_meth] 
    ,[As_ppm] 
    ,[As_limit] 
    ,[As_meth] 
    ,[Cu_ppm] 
    ,[Cu_limit] 
    ,[Cu_meth] 
    ,[Ni_ppm] 
    ,[Ni_limit] 
    ,[Ni_meth] 
    ,[Co_ppm] 
    ,[Co_limit] 
    ,[Co_meth] 
    ,[Pb_ppm] 
    ,[Pb_limit] 
    ,[Pb_meth] 
    ,[Zn_ppm] 
    ,[Zn_limit] 
    ,[Zn_meth] 
    ,[Lithology] 
    ,[Comments] 
    ,[CompositeID] 
    ,[SourcefileName] 
    ,[Coordinate_ID] 
    ,[Priority] 
    ,[myStyle] 
    ,[MI_PRINX] 
    ,therow = row_number() OVER(PARTITION BY [Coordinate_ID] ORDER BY [Coordinate_ID] DESC) 
    FROM [DRILLHOLES_Export].[dbo].[WAMEX_Soil_Live] 
    WHERE [A_number] = 'A069467' 
) 

DELETE FROM VALS 
WHERE therow > 1; 

我想通过表1(FilestoUpate)循环的每个a_number例如,“A069467”,然后“A078594”运行查询“A085473 ETE等

这可能吗?

问候,

彼得

+0

SQL不足以以您的线索为指导;请你详细说明一下。 – PeterTheGeo

回答

0

是的。 SQL对数据集进行操作,所以你就必须建立一套与行数据要删除:

DELETE table_to_delete 
    FROM [DRILLHOLES_Export].[dbo].[WAMEX_Soil_Live] table_to_delete 
    INNER JOIN [DRILLHOLES_Export].[dbo].[FilestoUpate] table_with_keys 
     ON table_to_delete.[A_number]=table_with_keys.[A_number] 

你也必须提供有关你婉从哪里删除数据信息:table_to_delete