を削除これは私は、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句で同じターゲット表を指定することはできませんので、私は、複数の選択をしています。上記のクエリが実行されます。私のテーブルのようになります。 '12 .43.34.53' をdestinationProcessId、
- SOURCEIP、destinationIp、destinationPort、sourceServerId、destinationServerId、sourceProcessId、'12 .43.34.65' 、 '3306'、NULL、 '2'、NULL、 '2'
- SOURCEIP、destinationIp、destinationPort、sourceServerId、destinationServerId、sourceProcessId、 '12 .43.34.53' をdestinationProcessId、'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行すべてが得られます。それはnull値を持つINが機能しないためですか?このクエリを修正して3行すべてを削除できるようにするための提案。 (すべてのIDSとIPS、および宛先ポートが一緒にテーブル内の行を一意にする)