0
这是我想在MySQL来执行查询特定行:删除可以有NULL值的一些列
DELETE from Connection
where
(sourceIp , destinationIp,
destinationPort,
sourceServerId,
destinationServerId,
sourceProcessId,
destinationProcessId) IN (Select
sourceIp,
destinationIp,
destinationPort,
sourceServerId,
destinationServerId,
sourceProcessId,
destinationProcessId
from
(Select
sourceIp,
destinationIp,
destinationPort,
sourceServerId,
destinationServerId,
sourceProcessId,
destinationProcessId
from
Connection
where
sourceIp = '12.43.34.53'
and destinationIp = '12.43.34.65'
and destinationPort = '3306'
and ((sourceServerId = '1'
and destinationServerId = '2'
and sourceProcessId = '1'
and destinationProcessId = '2')
or (sourceServerId IS NULL
and destinationServerId = '2'
and destinationProcessId = '2')
or (sourceServerId = '1'
and sourceProcessId = '1'
and destinationServerId is NULL))) as C);
我做多个选择,因为我不能在from子句指定同一个目标表。上面的查询执行。我的表看起来像这样:
- SOURCEIP,destinationIp,destinationPort,sourceServerId,destinationServerId,sourceProcessId,destinationProcessId '12 .43.34.53' ,'12 .43.34.65' , '3306',NULL, '2',NULL, '2'
- SOURCEIP,destinationIp,destinationPort,sourceServerId,destinationServerId,sourceProcessId,destinationProcessId '12 .43.34.53' ,'12 .43.34.65' , '3306', '1',NULL, '1',NULL
- sourceIp,destinationIp,destinationPort,sourceServerId,destinationServerId,sourceProcessId,destinationProcessId '12 .43.34.53','12 .43.34.65','3306','1','2','1','2 '
以上查询只删除最后一行(#3)。但是,如果在IN中删除查询并将其余部分执行为Select,那么我会得到所有3行。是否因为带有空值的IN不起作用?有关如何修改此查询以使其删除所有3行的任何建议。 (所有的IDS和IPS,目的端口一起使表中的行是唯一的)