2017-01-16 6 views
0

MySQLでEXCEPT/MINUSを実行したいと思います。プライマリキーなしでMySQLの違いを設定する

SELECT 
    * 
FROM 
    table_a AS a 
WHERE 
    a.ID not in(
     SELECT 
      b.ID 
     FROM 
      table_b AS b 
    ) 

しかし、私がキー列を持っていない場合、私は、すなわち、すべての(おそらく多くの)列を考慮し、実際のセットの差をつけたい:主キーが使用可能であった場合は、明白な解決策は可能でしょうか?

私は、これは当然のことはできません

SELECT * FROM table_a WHERE * NOT IN … 

のような何かをしたいです。変数全体に行を割り当てることはできません。何か案は?

+1

いくつかのサンプルテーブルデータと期待される結果、および書式付きテキストを追加します。 – jarlh

答えて

1

あなたはまだnot inを使用することができます。

select a.* 
from table_a a 
where (a.col1, a.col2, . . .) not in (select b.col1, b.col2, . . . from table_b b); 

私はしかし、existsを使用する傾向があるでしょう:

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

Not exists任意の列がnullを持っている場合は、通常、より直感的に動作します。さらに、<=>NULLセーフセーフな等価演算子を使用できます。

関連する問題