我有两个表:
create table m1 (id int, name varchar(255));
insert into m1 (id, name) values
(1, 'tingwei'),
(2, 'jiahui'),
(3, 'naidan'),
(5, 'weizhi'),
(9, 'siyao');
create table m2 (newid int, name varchar(255));
insert into m2 (newid, name) values
(1, 'leijun'),
(2, 'wangjianlin'),
(3, 'wangjianlin'),
(5, 'wangjianlin'),
(9, 'wangjianlin');
我想获得m1中所有满足条件的字段,其中m1中id的所有值都与m2中newid的所有值相同,这是我的代码:
select * from m1
where id = all (select newid from m2);
但是我得到了0条记录。id和newid的所有值都相同:1、2、3、5、9。我认为where子句应返回TRUE。为什么?
您的查询返回任何结果,因为它要求每个id
价值m1
是一样的所有的newid
价值观m2
,而且由于1
不等于2
,3
,5
或者9
不返回该行,并同样适用于其他行。有关全部内容,请参见子查询手册。
我认为您真正想要的是JOIN
on newid
,它将返回m1
其id
值存在于newid
中的行m2
:
SELECT m1.*
FROM m1
JOIN m2 ON m2.newid = m1.id
或一个IN
表达式:
SELECT m1.*
FROM m1
WHERE id IN (SELECT newid FROM m2)
输出(对于您的样本数据的两个查询):
id name
1 tingwei
2 jiahui
3 naidan
5 weizhi
9 siyao
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句