用于删除使用2列的NOT IN行的SQL查询

ran*_*ght 2 mysql sql

我有一个表,其中包含由2列组成的复合键,例如Name和ID.我有一些服务可以获取要保留的行的键(名称,id组合),其余的我需要删除.如果它只有一行,我可以使用

从table_name中删除名称不在(list_of_valid_names)

但是如何进行查询以便我可以说出类似的内容

name not in (valid_names) and id not in(valid_ids) 
// this wont work since they separately dont identity a unique record or will it?
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 8

使用mysql的特殊"多值" in语法:

delete from table_name 
where (name, id) not in (select name, id from some_table where some_condition);
Run Code Online (Sandbox Code Playgroud)

如果您的列表是文字列表,您仍然可以使用此方法:

delete from table_name 
where (name, id) not in (select 'john', 1 union select 'sally', 2);
Run Code Online (Sandbox Code Playgroud)

  • "mysql的特殊...语法" - 实际上,它是标准SQL-92(完整)语法.但是mySQL支持它很好.在SQL Server中,非常经常请求的功能,投票给它[这里]是非常好的(http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard -row-value-constructors):) (2认同)