从另一个表中减去一个表的行

时间:2014-01-22 09:01:41

标签: mysql null left-join

我在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中检查了'EXPECT','MINUS',但他们在MySql中不支持。

任何人都可以帮助我吗?谢谢你的到来。

1 个答案:

答案 0 :(得分:3)

TableAU中的数据

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

表中的数据

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相同。