站保站

服务市场
  • 网站市场
  • 单机游戏
  • 平台大厅
  • 转让市场
  • 发卡市场
  • 广告市场
  • 下载市场
  • 收录市场
  • 本站平台
    平台客服
    微信Q群



    平台微博/weibo    平台微信/公众号    平台抖音/快手   
    曝光台    保障    地图   
    上传资源 快速赚钱
    站保站    登录      |  注册  |  

    只需一步,快速开始!

     找回密码   |   协议
    热门搜索: 网站开发 App报毒 挖矿源码 代办资质

    有趣的SQL二:两个表没连接条件的JOIN

    • 时间:2019-07-26 08:15 编辑:老叶茶馆_ 来源: 阅读:3815
    • 扫一扫,手机访问
    摘要:

    文章节选自松华老师《SQL开发与优化》专栏,想阅读更多内容请扫码订阅

    640?wx_fmt=png


    今天逛论坛看到了一个,奇葩需求,他想把两个表的结果连在一起显示

    我把需求整理如下 :

    下面有两个表 a 和 t12 数据分别如下

    640?wx_fmt=jpeg


    现在想要的结果是 

    640?wx_fmt=jpeg


    现在我们来分析一下,怎样满足上述需求

    1,如果我们想把不同的表中的列横向展示,那肯定只有JOIN或者标量子查询

    2,如果用了1的方案,那必须得有连接条件,不然会产生笛卡尔积,或者是空


    先给大家展示下 2 的两种效果

    第一种 JOIN 没有连接条件

    640?wx_fmt=jpeg


    从上面的结果中,可以看到 有重复值,当然对这个结果,至少我们把列显示在一起了。

    可以利用一些特性,是能达到我们想要的结果,这个以后有机会再延伸。


    第二种,利用标量子查询

    640?wx_fmt=jpeg


    从结果中,可以看出,一开始会报个错误,之后添加了 limit 1 之后 结果是出来了 ,但是跟我想的不一样

    上面的两种方法,都可以达到列出来的效果,但是都有一些问题,现在对上面两种方法,进行补救措施,达到我们想要的结果。

    第一种 join 方法

    640?wx_fmt=jpeg


    从图片中,看出的问题是,没有连接条件导致,有重复值。

    那么解决方案就是,找出一个连接条件,使它不出现重复值!

    我经常跟我SQL优化班中的学员说,

    “写SQL如同解决数学数学问题一样,最难得是添加辅助线!

    这里的辅助线是什么?

    答案就是:需要人为的对两个表添加一个列,保证他们的关系是1:1 就可以达到join的效果了

    现在做的就是,在两边分别添加一个1,2,3,4...这样的序列,然后用这个进join 或者left join 。

    现在MySQL 已经到8.0版本,为了更好的促使大家学到新知识,我在这用row_number over

    窗口函数,如果你是MySQL 5.7版本,你也可以使用@ 自变量方法得到,这一点,请大家自行在网上查阅!

    640?wx_fmt=jpeg


    如上图所示,结果跟我们的预期一样!!

    现在还有,使用标量子查询 达到我们预期结果的问题。这个,大家可以自行写一下,一起探讨。

    一个SQL如同数学题一样,也有不同的写法,达到同一个结果!

    以上就是,今天的内容

    谢谢大家~ 欢迎转发

    我是知数堂SQL优化班老师

    如有关于SQL优化方面疑问需要交流的,请加入QQ群579036588),并

    @骑龟的兔子 就可与我联系


    扫码订阅《SQL开发与优化专栏,get更多SQL优化技能

    640?wx_fmt=png

    END




    640?wx_fmt=png

    640?wx_fmt=png



    640?wx_fmt=gif


    扫码加入MySQL技术Q群

    (群号:579036588)

       

    640?wx_fmt=jpeg




    • 全部评论(0)
    • 最新

    信息加载中,请等待

    微信客服(速回)

    微信客服(慢回)



    企业微信客服二维码
    联系我们
    平台客服: 平台QQ客服

    平台电话:400电话迁移中!

    平台邮箱:28292383@qq.com

    工作时间:周一至周五:早10:00 晚:18:00

    营业执照     网站ICP备案:鲁ICP备20027607号-1     鲁公网安备:37068702000078号     增值电信业务经营许可证、在线数据与交易处理业务许可证:鲁B2-20200681      © 2016-2024 站保站  https://www.zhanbaozhan.com/ 版权所有!      平台规范:   关于我们   广告合作   隐私条款   免责声明   法律声明   服务条款   网站地图   平台工单!