2017-10-29 19 views
0

同じカラム名を持つテーブルAとテーブルBの2つのテーブルがあります。テーブルAには存在しないがテーブルBに存在するレコードを取得したい。2つのテーブル間で珍しいレコードを選択する - mysql

ありがとうございます。

+2

参照[なぜ私は非常に単純なSQLクエリであることを私には思える何のためにMCVEを提供する必要があります](http://meta.stackoverflow.com/questions/333952/に参加し、左を使用しますなぜ、私が提供する、何のためのものなのでしょうか? – Strawberry

答えて

1

Select * from tableb left join tablea on tableb.column = tablea.coulmn where tablea.column is null 
+0

ありがとう、これは私のために働きます! – user375947

0

exceptまたはminusをサポートするデータベースもあります。しかし、MySQLではありません。私はnot existsをお勧めします:任意の列がNULL値を持っている場合、これは動作しないこと

select b.* 
from b 
where not exists (select 1 
        from a 
        where a.col1 = b.col1 and a.col2 = b.col2 and . . . 
       ); 

注意を。

NULLを処理する必要がある場合は、(not a.col1 <=> b.col1) and (not a.col2 <=> b.col2) . . .を使用できます。または、集約を使用することができます。

select col1, col2, . . . 
from ((select a.*, 1 as is_a, 0 as is_b 
     from a 
    ) union all 
     (select b.*, 0, 1 
     from b 
    ) 
    ) ab 
group by col1, col2, . . . 
having max(is_a) = 0 and max(is_b) = 1; 
0

主キーが同じ場合(たとえば、idフィールド)、行が同じであるとします。

select id from b where id not in (select id from a) 

テーブルに主キーがない場合や、一致しない場合は、クエリをテーブル構造に変更できます。

関連する問題