我有一个两个表a和B。我必须只从与B表不匹配的a表中获取数据(意味着从两个表中都获取不常见的数据)。但输出应该只来自表a。
表值A
1、2、3、4、5、6
表值B
1,2,7,8,9,0
输出应低于上述数据
34.5.6
试试这个,可能对你有用;)
select *
from tablea a
where not exists(select 1 from tableb b where a.value = b.value)
SQL Fiddle
MySQL 5.6架构:
CREATE TABLE IF NOT EXISTS `tablea` (
`value` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tablea` (`value`) VALUES
(1),
(2),
(3),
(4),
(5),
(6);
CREATE TABLE IF NOT EXISTS `tableb` (
`value` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
INSERT INTO `tableb` (`value`) VALUES
(1),
(2),
(7),
(8),
(9),
(0);
查询1:
select *
from tablea a
where not exists(select 1 from tableb b where a.value = b.value)
结果:
| value |
|-------|
| 3 |
| 4 |
| 5 |
| 6 |
您可以使用NOT IN
SELECT *
FROM TableA
WHERE _value NOT IN
(SELECT _value FROM TableB)
您可以使用JOIN来获得所需的结果。
LEFT JOIN关键字返回左表(表1)中的所有行,匹配的行在右表(表2)中。当没有匹配项时,右侧的结果为NULL。
select a.value
from tablea a
left join tableb b on a.value = b.value where b.value is null;
SQL Fiddle
结果
| value |
|-------|
| 3 |
| 4 |
| 5 |
| 6 |