baidu5555 2018-01-28 17:21 采纳率: 100%
浏览 1710
已采纳

关于MySql 查询语句的问题 LEFT JOIN

我有一个结果集,然后我想要另一张表对着我的查询的结果有的显示内容,没有的显示空。
SELECT E.classname,E.classid,S.title,S.kjdata FROM phome_ecms_ssc S, phome_enewsclass E,(SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW()) ORDER BY kjdate LIMIT 1) B where S.classid = 26 and S.classid = E.classid and S.id <= B.id ORDER BY S.id DESC LIMIT 10
这一段是我的的结果
phome_ecms_yuce
这张是我要关联的表

我真的没有用过 JOIN 最终我写的是

SELECT E.classname,E.classid,S.title,S.kjdata FROM phome_ecms_ssc S, phome_enewsclass E,(SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW()) ORDER BY kjdate LIMIT 1) B where S.classid = 26 and S.classid = E.classid and S.id <= B.id ORDER BY S.id DESC LIMIT 10
LEFT JOIN phome_ecms_yuce Y ON S.classid = Y.wanfaid and S.title = Y.qihao and Y.jihuaid = 1

这个写法是错误的,求大神指点

  • 写回答

13条回答 默认 最新

  • qq_39690665 2018-01-29 01:25
    关注

    left join是不能放在where后面的,如果是想要join前面生成的结果集的话,需要将生成结果集再join

    select * from (SELECT E.classname,E.classid,S.title,S.kjdata FROM phome_ecms_ssc S, phome_enewsclass E,(SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW()) ORDER BY kjdate LIMIT 1) B where S.classid = 26 and S.classid = E.classid and S.id <= B.id ORDER BY S.id DESC LIMIT 10 ) ls left join phome_ecms_yuce Y ON Y.wanfaid=ls.classid and Y.qihao=ls.title and Y.jihuaid = 1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • liuabay 2018-01-28 23:56
    关注

    order by 不能再left join 之前的,所以会报错

    评论
  • liuabay 2018-01-29 00:19
    关注

    SELECT E.classname,E.classid,S.title,S.kjdata
    FROM phome_ecms_ssc S, phome_enewsclass E,
    (SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW()) ORDER BY kjdate LIMIT 1) B
    LEFT JOIN phome_ecms_yuce Y ON S.classid = Y.wanfaid and S.title = Y.qihao and Y.jihuaid = 1
    where S.classid = 26 and S.classid = E.classid and S.id <= B.id
    ORDER BY S.id DESC LIMIT 10

    评论
  • 独风飘絮 2018-01-29 01:00
    关注

    把 ORDER BY S.id DESC LIMIT 10 放到最后面

    评论
  • nc9527 2018-01-29 01:01
    关注

    要通过left join先生成虚拟表,然后在虚拟表中执行where筛选,所以要把where放在left join之后。

    评论
  • mango_love 2018-01-29 01:25
    关注

    select * from (select * from phome_ecms_yuce where jihuaid = 1) Y left join
    (SELECT E.classname,E.classid,S.title,S.kjdata FROM phome_ecms_ssc S, phome_enewsclass E,(SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW()) ORDER BY kjdate LIMIT 1) B where S.classid = 26 and S.classid = E.classid and S.id <= B.id ORDER BY S.id DESC LIMIT 10 )as s
    ON S.classid = Y.wanfaid and S.title = Y.qihao

    评论
  • 决决怪 2018-01-29 01:33
    关注

    order by 不能再left join 之前的,所以会报错

    评论
  • wodeai258 2018-01-29 01:56
    关注

    left join是连接查询的,是主表查询的附加查询,order by是对整个查询结果进行处理的,所以order by的作用域是针对整个查询语句,要放在sql查询的最后

    评论
  • luofenghen 2018-01-29 02:14
    关注

    join 是内连接, 就是2张表都存在才显示
    left join 是左连接,以左边这个表为主,左边的存在记录就存在
    SELECT E.classname,E.classid,S.title,S.kjdata
    FROM phome_ecms_ssc S, phome_enewsclass E
    ,(SELECT id FROM phome_ecms_ssc where classid = 26 and kjdate > UNIX_TIMESTAMP(NOW())) B
    where S.classid = 26 and S.classid = E.classid and S.id <= B.id
    LEFT JOIN phome_ecms_yuce Y ON S.classid = Y.wanfaid and S.title = Y.qihao and Y.jihuaid = 1
    ORDER BY S.id DESC LIMIT 10

    评论
  • C语言小王子 2018-01-29 02:27
    关注

    order by 绝对是不能再left join 之前的

    评论
  • thinking_fioa 2018-01-29 02:45
    关注

    order by是语句的之后,这个可以理解性记忆。如果想系统的学习或回忆SQL使用,请参看:http://blog.csdn.net/thinking_fioa/article/details/78265745

    评论
  • niaonao 2018-01-29 04:09
    关注

    用法:left join 写在where前面,
    理解:左外链接,左表(Dave)的记录将会全部表示出来,而右表(BL)只会显示符合搜索条件的记录。BL表记录不足的地方均为NULL.

    评论
  • 我在学习java 2018-01-29 09:20
    关注

    试试这个
    (SELECT E.classname,E.classid,S.title,S.kjdata
    FROM phome_ecms_ssc S, phome_enewsclass E,
    (
    SELECT id
    FROM phome_ecms_ssc
    where classid = 26
    and kjdate > UNIX_TIMESTAMP(NOW())
    ORDER BY kjdate LIMIT 1 ) B
    where S.classid = 26
    and S.classid = E.classid
    and S.id <= B.id ) A
    LEFT JOIN phome_ecms_yuce Y
    ON A.classid = Y.wanfaid
    and A.title = Y.qihao
    and Y.jihuaid = 1
    ORDER BY A.id DESC
    LIMIT 10

    评论
查看更多回答(12条)

报告相同问题?

悬赏问题

  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 stc12c5a60s2单片机测光敏ADC
  • ¥15 生信simpleaffy包下载
  • ¥15 请教一下simulink中S函数相关问题
  • ¥15 在二层网络中,掩码存在包含关系即可通信
  • ¥15 端口转发器解析失败不知道电脑设置了啥
  • ¥15 Latex算法流程图行号自定义
  • ¥15 关于#python#的问题:我在自己的电脑上运行起来总是报错,希望能给我一个详细的教程,(开发工具-github)
  • ¥40 基于51单片机实现球赛计分器功能