2017-01-16 55 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安全相等運算符。