2014-01-22 8 views
2

У меня есть две таблицы в MySql, которые содержат записи примерно так.Вычесть строки из одной таблицы из другой таблицы

table-A     table-B 
---------------------  --------------------- 
|prod_id | cat_id |  |prod_id | cat_id | 
---------------------  --------------------- 
|1  |1  |  |1  |1  | 
|2  |1  |  |2  |1  | 
|3  |1  |  |3  |1  | 
          |4  |1  | 
          |5  |1  | 

Теперь я хочу сравнить эти две таблицы и ожидаемый результат.

--------------------- 
|prod_id | cat_id | 
--------------------- 
|4  |1  | 
|5  |1  | 

Я проверил о «ОЖИДАТЬ», «МИНУС» в SQL, но они не поддерживают в MySql.

Может кто-нибудь мне помочь? Спасибо заранее.

+0

Этот вопрос не соответствует теме, поскольку OP не прилагал никаких усилий, чтобы попытаться решить это самостоятельно. – Kermit

+0

Это неправда. Я попытался присоединиться к другим функциям sql, но они дают мне общие значения, не оставшиеся значения, и другие sql-синтаксисы, не поддерживающие mysql, поэтому, наконец, я задал этот вопрос на администраторах баз данных. –

ответ

3

Данные в TableA

SELECT * FROM TableA; 
+---------+--------+ 
| prod_id | cat_id | 
+---------+--------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  1 | 
+---------+--------+ 
3 rows in set (0.00 sec) 

данных в TableB

SELECT * FROM TableB; 
+---------+--------+ 
| prod_id | cat_id | 
+---------+--------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  1 | 
|  4 |  1 | 
|  5 |  1 | 
+---------+--------+ 
5 rows in set (0.00 sec) 

Результирующая запроса

SELECT b.* 
FROM TableB b 
LEFT JOIN TableA a 
ON a.prod_id = b.prod_id AND a.cat_id = b.cat_id 
WHERE a.prod_id IS NULL; 
+---------+--------+ 
| prod_id | cat_id | 
+---------+--------+ 
|  4 |  1 | 
|  5 |  1 | 
+---------+--------+ 
2 rows in set (0.00 sec) 

sqlfiddle для таких же.

+1

Вам не нужно проверять оба столбца для NULL, один достаточно: 'WHERE a.prod_id IS NULL;' –

+0

Конечно, @ypercube, я позабочусь об этом. –

Смежные вопросы