wy465342
get火花
采纳率25%
2018-06-03 10:41

mysql多表查询,有个中间表,如何查询

80
已采纳

图片说明图片说明图片说明如图,有张中间表,怎么通过article表的id查询article表中所有的值已经tag表中的name字段的值,name可能是多个,小弟刚入行没多久,多谢各位解答

# ## 图片说明如何通过article表中的id查询article表下面的内容以及tag下面的name字段的值,一条article的数据可能有多个tag表的name

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • weixin_41497737 weixin_41497737 3年前

    select a.title , t.name from article a
    left join tag_article ta on a.id = ta.article_id
    join tag t on ta.tag_id = t.id

    查询出来是这个样子的.

    图片说明

    这里并没有展示article表中的所有字段,是为能更加清晰的查看查询结果.

    说明一下思路 :
    1.首先,是一对多的关系,那么肯定有一个非等值连接.使用左连接或者右连接,在这里,我是把article
    表放在了前面,所以使用了左连接,使得article表中的值能对应多个tag中name.
    2.那么,还有一个中间表,你可以这么思考,把中间表和tag的查询结果当做一个表.所以中间表和tag
    直接用等值连接就可以了.

    ok了.

    点赞 3 评论 复制链接分享
  • chenxiansheng888 小刀有话说 3年前

    简单直接明了 推荐去研究一下 mysql的关联查询 left/right/inner join on

    点赞 评论 复制链接分享
  • qq_34055192 qq_34055192 3年前

    select a.* ,t.name from article a left join tag_article ta on ta.article_id=a.id left join tag t on t.id=ta.tag_id

    点赞 评论 复制链接分享
  • qq_42075414 宇_2018 3年前

    select a.id, a.title, a.introduction, a.html_material, a.md_material, a.get_create, a.get_modified, t.name
    from article a inner join tag_article ta inner join tag t on a.id = ta.article_id and t.id = ta.tag_id
    上面那个写错了
    看这个
    看这个
    居然不让改 心塞

    点赞 评论 复制链接分享
  • flower_CSDN flower_csdn 3年前

    select a.id a.title,a.introduction,a.html_material,a.md_material,a.gmt_create,a.gmt_modified .b.name from article a left join tag b where a.id=? and b.id=(select tdg_id from tag_article where article_id=?)
    没太看懂楼主的题的意思:怎么通过article表的id查询article表中所有的值已经tag表中的name字段的值,name可能是多个,已经=以及?

    点赞 评论 复制链接分享
  • qq_42075414 宇_2018 3年前

    select a.id, a.title, a.introduction, a.html_material, a.md_material, a.get_create, a.get_modified
    from article a inner join tag_article ta inner join tag t on a.id = ta.article_id and t.id = ta.tag_id
    大概是这样

    点赞 评论 复制链接分享
  • weixin_42236253 GuGu 3年前

    elect id,name as 处理人,(select c.name
    from A a,B b,C c
    where a.id = b.Aid and c.id = b.Cid and a.id=t.id) 所属机构 from(
    select a.id,a.name,
    sum(case when d.STATUS=0 then 1 else 0 end) as 待处理,
    sum(case when d.STATUS=1 then 1 else 0 end) as 带跟进,
    sum(case when d.STATUS=2 then 1 else 0 end) as 已结束,
    sum(case when d.STATUS=3 then 1 else 0 end) as 已完成
    from D d,A a
    where a.id = d.Aid (d表的Aid和a表的id对应,但d表有多条数据的Aid=a.id)
    group by a.id
    ) t
    解决方案二:
    select id,name, name_c 所属机构, BB.待处理, BB.带跟进, BB.已结束, BB.已完成 from
    (select a.id, a.name, c.name name_c
    from A a,B b,C c
    where a.id = b.Aid and c.id = b.Cid and a.id=t.id) AA,
    (select a.id,a.name,
    sum(case when d.STATUS=0 then 1 else 0 end) as 待处理,
    sum(case when d.STATUS=1 then 1 else 0 end) as 带跟进,
    sum(case when d.STATUS=2 then 1 else 0 end) as 已结束,
    sum(case when d.STATUS=3 then 1 else 0 end) as 已完成
    from D d,A a
    where a.id = d.Aid
    group by a.id) BB
    where AA.id = bb.id

    点赞 评论 复制链接分享

相关推荐