0

ipDHCP 範囲外のレコードが必要です。テーブルには1ip万を超えるレコードがあり、範囲は約 1000 です。

CREATE TABLE ip (ip int);
CREATE TABLE dhcprange (start int,end int);
INSERT INTO found_ips VALUES 
(INET_ATON('10.0.0.10')),
(INET_ATON('10.0.0.11')),
(INET_ATON('10.0.0.12')),
(INET_ATON('10.0.0.51')),
(INET_ATON('10.0.0.52')
);

INSERT INTO dhcpranges VALUES
(INET_ATON('10.0.0.50'),INET_ATON('10.0.0.60'),
(INET_ATON('10.0.0.70'),INET_ATON('10.0.0.100') 
);

(残念ながら、これは sqlfiddle では機能しません (inet_aton はサポートされていませんか?))

これは機能しません:

SELECT ip FROM ip WHERE ip NOT BETWEEN(SELECT start,end FROM dhcprange)

アイデア?

4

2 に答える 2

2
SELECT i.ip 
FROM ip i 
WHERE NOT EXISTS (
   SELECT NULL
   FROM dhcprange d
   WHERE i.ip BETWEEN d.start AND d.end)
于 2012-07-05T06:57:32.373 に答える
2

これを行うにはいくつかの方法があります。最善の方法は、次のようにLEFT JOIN/を使用することです。IS NULL

SELECT ip
FROM ip
LEFT JOIN dhcpranges ON ip BETWEEN start AND end
WHERE start IS NULL

非相関サブクエリを実行できます。

SELECT ip
FROM ip
WHERE ip NOT IN (SELECT ip FROM ip INNER JOIN dhcpranges WHERE ip BETWEEN start AND end)

または、相関サブクエリを使用します。

SELECT a.ip
FROM ip a
WHERE NOT EXISTS (SELECT 1 FROM dhcpranges WHERE a.ip BETWEEN start AND end)
于 2012-07-05T06:54:57.603 に答える