SQL语句优化 in 改写成join 、1对多取出1对1、笛卡尔积、 where is null 、NULL导致not in写法不对、行号问题

x.a必须是唯一的,才能改写成join的语句。

select * from x where a in (select a from y );

select  distinct x.* from x join y  on x.a=y.a;

已经能满足大多数场景。

二、一对多

only_full_group_by

研发提供的错误写法

   SELECT
Openid,
max(OperateTime),
      SourceIndex
FROM
A
GROUP BY
Openid;

由于group by 中只有Openid,sql_mode如果严格,执行是不成功的。

正确语句如下:

 

select * from A  where (Openid,OperateTime) in (select Openid,max(OperateTime) from  A  group by Openid);

########################################################################################

两张表1对多,取出1对1的信息

 

 

where lie is null  ,不要用and lie is null

###########################################

笛卡尔积:

select * from a,b; 没有条件

########################################

 

 

 

为什么列里不让有NULL,NULL会导致查询not in 查出来的数据有问题。

正确的写法:

select * from a where id not in (select id from b where id is not null );

######################################################################

 行号:

 

posted on 2017-12-03 16:49  星期六男爵  阅读(1841)  评论(0编辑  收藏  举报

导航