有两张表t1,t2,这两张表分别有两列name,courset1 表含有数据:
小张,c语言
小张, 数据结构
小刘,go语言t2表含有数据:
小张,c语言
小张, 数据结构
小张,高数
小刘,go语言
小刘,perl
小王,android现在要找出t2表中name相同,course列比t1表中多出的记录:
小张,高数
小刘,perl
小张,c语言
小张, 数据结构
小刘,go语言t2表含有数据:
小张,c语言
小张, 数据结构
小张,高数
小刘,go语言
小刘,perl
小王,android现在要找出t2表中name相同,course列比t1表中多出的记录:
小张,高数
小刘,perl
select t2.`name`,t2.`course` from t1 inner join t2 on t1.`name`=t2.`name` and not exists(select 1 from t1 where t2.`name`=t1.`name` and t2.`course`=t1.`course`);
USE test;DROP TABLE
IF EXISTS `t1`;CREATE TABLE t1 (
`name` VARCHAR (10) NOT NULL,
`course` VARCHAR (10) NOT NULL
) ENGINE = MyISAM DEFAULT CHARSET = utf8;DROP TABLE
IF EXISTS `t2`;CREATE TABLE t2 (
`name` VARCHAR (10) NOT NULL,
`course` VARCHAR (10) NOT NULL
) ENGINE = MyISAM DEFAULT CHARSET = utf8;INSERT t1
VALUES
('小张', 'c语言'),
('小张', '数据结构'),
('小刘', 'go语言');INSERT t2
VALUES
('小张', 'c语言'),
('小张', '数据结构'),
('小张', '高数'),
('小刘', 'go语言'),
('小刘', 'perl'),
('小王', 'android');SELECT DISTINCT
t2.`name`,
t2.`course`
FROM
t1
INNER JOIN t2 ON t1.`name` = t2.`name`
AND NOT EXISTS (
SELECT
1
FROM
t1
WHERE
t2.`name` = t1.`name`
AND t2.`course` = t1.`course`
);DROP TABLE t1;DROP TABLE t2;
WHERE t2.name IN (SELECT NAME FROM t1 GROUP BY NAME)
AND
t2.course NOT IN (SELECT course FROM t1 )