我们在业务逻辑中,经常会涉及两张表之间的数据比较,
其中涉及到某张表中独一份的数据,如下
1 两张表中相同字段name , 查询出在表a存在而表b中不存在的数据,并去重
方法一:
SELECT DISTINCT(a.name) FROM table a
WHERE a.name NOT IN (SELECT DISTINCT(b.name) FROM table b)
方法二:
SELECT DISTINCT(a.name) FROM table a
WHERE NOT EXISTS (SELECT b.name FROM table b WHERE a.name = b.name)
方法三:
SELECT DISTINCT(a.name) FROM table a
LEFT JOIN table b ON a.name = b.name
WHERE b.name IS NULL
方法四:
SELECT DISTINCT(a.name) FROM table a
WHERE (SELECT COUNT(1) as num from FROM table b WHERE a.name = b.name) = 0
2 查询出字段name , 在表a存在而表b中不存在的数据的数量是多少
方法一:
SELECT COUNT(DISTINCT(a.name)) FROM table a
WHERE a.name NOT IN (SELECT DISTINCT(b.name) FROM table b)
方法二:
SELECT COUNT(DISTINCT(a.name)) FROM table a
WHERE NOT EXISTS (SELECT b.name FROM table b WHERE a.name = b.name)
方法三:
SELECT COUNT(DISTINCT(a.name)) FROM table a
LEFT JOINtable b ON a.name = b.name
WHERE b.name IS NULL
方法四:
SELECT COUNT(DISTINCT(a.name)) FROM table a
WHERE (SELECT COUNT(1) as num from FROM table b WHERE a.name = b.name) = 0