2016-10-08 9 views
0

私はsqlite3の3.14.2を使用して、次のやろうとしている中での基準に基づいて除外を選択する方法:上記が正しく選択テーブル

drop table IP; 
create table IP(IP TEXT, 
       Name TEXT); 
insert into IP values('10.5.6.7','Joe'); 
insert into IP values('10.6.6.7','Joe'); 
insert into IP values('10.2.3.4','Frank'); 
insert into IP values('10.3.5.7','David'); 
insert into IP values('10.34.56.78','David'); 
--select * from IP; 

drop table lookem; 
create table lookem(IP TEXT, 
        Name TEXT); 
insert into lookem values('','Joe'); -- Exclude Joe for All IPs 
insert into lookem values('','George'); -- Exclude George for all IPs 
insert into lookem values('10.4.5.6','Frank');-- Excl Frank for 1 ip 
insert into lookem values('10.34.56.78','David');-- Excl David on Specific IP 
--select * from lookem; 

select a.ip,a.name,b.name,b.ip from lookem a join ip b on 
    (b.name like case when a.name='' then '%' else a.name end) and 
    (b.ip like case when a.ip='' then '%' else a.ip end); 

考えると二つのテーブルIPをしてlookemワイルドカードを空白の値に置き換えて、lookemテーブルが複数の基準でIPテーブルと一致するすべてのケースを示す私のために働いています。

|Joe|Joe|10.5.6.7 
|Joe|Joe|10.6.6.7 
10.34.56.78|David|David|10.34.56.78 

しかし、その逆は何ですか?本当に必要なのは試合の除外です。言い換えると、返す単一のクエリ:

10.3.5.7|David 
10.2.3.4|Frank 

唯一の結果です。ご協力いただきありがとうございます。

答えて

1

は、ここであなたが使用しても、あなたの最初のクエリが再書き込み可能Left JOIN

SELECT a.ip, 
     a.NAME 
FROM IP a 
     LEFT JOIN lookem b 
       ON (a.IP = b.ip 
        OR b.ip = '') 
       AND a.NAME = b.NAME 
WHERE b.NAME IS NULL 

を使うlookemテーブルを使用してから列を選択したい場合にはNOT EXISTS

SELECT a.ip, 
     a.NAME 
FROM IP a 
WHERE NOT EXISTS (SELECT 1 
        FROM lookem b 
        WHERE (a.IP = b.ip 
          OR b.ip = '') 
          AND a.NAME = b.NAME) 

使用して一つの方法であるEXISTS

SELECT a.ip, 
     a.NAME 
FROM IP a 
WHERE EXISTS (SELECT 1 
        FROM lookem b 
        WHERE (a.IP = b.ip 
          OR b.ip = '') 
          AND a.NAME = b.NAME) 

あなたがlookemテーブルを使用してから列を選択したい場合は、その後Inner JOIN

SELECT a.ip, 
     a.NAME 
FROM IP a 
     JOIN lookem b 
     ON (a.IP = b.ip 
       OR b.ip = '') 
      AND a.NAME = b.NAME 
+0

感謝を使用!私はインターネットが大好きです... – user6939809

+0

問題はありません、私はちょうどそれをしました!おかげでPrdp! – user6939809

関連する問題