Mysql 这两个问题之间的区别是什么?有人能解释吗

Mysql 这两个问题之间的区别是什么?有人能解释吗,mysql,sql,Mysql,Sql,我以为我在下面两个查询中得到了相同的结果,但当我尝试时得到了不同的结果,除了join和subquery,有人能解释一下区别吗。 这里t1id是主列,t2id是tbl_1中引用的列 select * from tbl_1 where t1id in (select t2id from tbl_2); select t1.* from tbl_1 t1, tbl_2 t2 where t1.t1id = t2.t2id; 编辑:当我尝试第一次查询得到93条记录,第二次查询得到74条记录时,我对第

我以为我在下面两个查询中得到了相同的结果,但当我尝试时得到了不同的结果,除了join和subquery,有人能解释一下区别吗。 这里t1id是主列,t2id是tbl_1中引用的列

select * from tbl_1 where t1id in (select t2id from tbl_2);

select t1.* from tbl_1 t1, tbl_2 t2 where t1.t1id = t2.t2id;
编辑:当我尝试第一次查询得到93条记录,第二次查询得到74条记录时,我对第一次查询做了一些轻微的更改,如:

select * from tbl_1 where t1id in (select distinct t2id from tbl_2);
然后我有40排。有人能解释发生了什么事吗


提前感谢

第一个查询从第一个表中选择在第二个表中具有id的所有行

第二个查询选择第一个表中的所有行,对于这些行中的每一行,选择第二个表中的所有行。然后它过滤掉id不匹配的行


如果id在第二个表中不是唯一的,则第二个查询可以返回比第一个表更多的行。

第一个查询从第一个表中选择第二个表中具有id的所有行

第二个查询选择第一个表中的所有行,对于这些行中的每一行,选择第二个表中的所有行。然后它过滤掉id不匹配的行


如果id在第二个表中不是唯一的,则第二个查询可以返回比第一个查询更多的行。

它们都尝试执行相同的操作:从tbl_1获取id值可以在t2id列中找到的所有行(如果tbl_2),虽然如果在tbl_2中多次找到id,则第二个将多次从tbl_1返回同一行,但这并不是特别有用

但这两个查询都不如这一个,它也做了明智的事情,只是效率更高:

select distinct t1.*
from tbl_1 t1
join tbl_2 t2 on t1.t1id = t2.t2id;

他们都在尝试做同样的事情:从tbl_1中获取id值可以在t2id列中找到的所有行(如果tbl_2中多次找到id,则第二行将多次从tbl_1返回同一行)

但这两个查询都不如这一个,它也做了明智的事情,只是效率更高:

select distinct t1.*
from tbl_1 t1
join tbl_2 t2 on t1.t1id = t2.t2id;

“in”和“join”查询不匹配的原因是:-

tbl1 身份证名称 1 abc

tbl2 身份证名称 1 abc 1 abc

现在,从tbl1中选择*其中id在select id from tbl2中 虽然表2中存在2个id值,即1,但从tbl1中只提取了一行。 您可以按以下方式尝试执行上述查询: 从tbl1中选择*其中id在1,1->它将只给出1行 这是因为,如果指定的值与子查询或列表中的任何值匹配,In将返回true


第二,innerjoin查询将产生2行,因为tbl1中的id与tbl2表中的2行匹配。

导致“in”和“join”查询不匹配的原因是:-

tbl1 身份证名称 1 abc

tbl2 身份证名称 1 abc 1 abc

现在,从tbl1中选择*其中id在select id from tbl2中 虽然表2中存在2个id值,即1,但从tbl1中只提取了一行。 您可以按以下方式尝试执行上述查询: 从tbl1中选择*其中id在1,1->它将只给出1行 这是因为,如果指定的值与子查询或列表中的任何值匹配,In将返回true


第二,innerjoin查询将产生2行,因为tbl1中的id与tbl2表中的2行匹配。

当您比较这两行时,解释了什么?第二个查询是一种连接形式,其中第一个查询是一个直接向上的子选择?第二个查询是一种联接形式,其中第一个查询是一个直接向上的子选择。@a_horse_,名称为yep。现在呢?请看我编辑的问题,我已经说过我认为它达到了相同的效果,但我得到了不同的结果。你再次传达了相同的信息为什么你认为不同的操作是有效的?根据我的经验,它们相当昂贵。@a_马_没有名字是的。现在呢?请看我编辑的问题,我已经说过我认为它达到了相同的效果,但我得到了不同的结果。你再次传达了相同的信息为什么你认为不同的操作是有效的?根据我的经验,它们是相当昂贵的。但相反,我第一次查询得到93条记录,第二次查询得到74条记录,我不明白为什么会这样。。!现在请看一下我编辑的问题,然后请回答哦,伙计。。!第二个id不应该是唯一的,我想它是外键,在我的场景中不是一对一的关系,但相反,我第一次查询得到93条记录,第二次查询得到74条记录,我不明白为什么要登录。。!现在请看一下我编辑的问题,然后请回答哦,伙计。。!我认为第二个id不应该是唯一的,因为它是外键,在我的场景中不是一对一的关系