开发者社区> 问答> 正文

对多对,跨表查询,sql语句怎么写,急,在线等

下面是数据库结构,Relationships是文章表和类别、标签表的关系表,他们是多对多。

我现在在aid=1的详情页面,查询相同相同类别的文章。 这个sql语句怎么写?

目前实现了想要的功能,感谢 @rockman

    $midSql = 'SELECT relationships.mid FROM relationships INNER JOIN metas ON metas.mid = relationships.mid WHERE relationships.aid = :aid AND metas.type =  "category"';

    $aidSql = 'select relationships.aid from relationships where relationships.aid != :aid AND relationships.mid IN ( '.$midSql.' )';

    $sql = 'select articles.aid,articles.title fromarticles where articles.aid IN ( '.$aidSql.' )';
可能你们能有更好的方案,可以一起探讨下。

Metas 类别、标签表
category是类别,tag是标签

Articles 文章表
aid、title、created、modified、text、viewNum
1   title1
2   title2
3   title3

Metas 类别、标签表
mid、name、count、parent、type 
1 、category1、0、0、category
2 、category1、3、1、category
3 、 tag1、  3 、0、tag 

Relationships 关系表
aid、mid
1、2
1、3
2、2
2、3
3、2
3、3

展开
收起
a123456678 2016-06-29 14:04:28 2836 0
1 条回答
写回答
取消 提交回答
  • 建议写个视图,直接查询多个数据库,速度很成问题的,你可以这样 create view V_Select  ( @name nvarchar(20) ) as  begin     select a.* from      (     select * from 数据库名.dbo.table1     union all     select * from 数据库名.dbo.table2     .....     )a     where isnull(@name,'')='' or name='张三' end  说明一下:  因为你要查询10个数据库的表,必须这10个数据库你都可以在此数据库访问的到,这是基本条件 我连接每个表的数据是用union all,这是所有数据均包含,如果你要去掉重复数据,就用union   不明白,就接着问,OK,请采纳
    

    答案来源网络,供参考,希望对您有帮助

    2019-10-17 13:43:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载