sql多对多关系的两表如何联合查询出所有的结果?

sql多对多关系的两表如何联合查询出所有的结果?,第1张

1、语句如下:

Select project.*, [contract].* from project

Left join contract_project on project.projectId = contract_project.projectId

Left join [contract] on contract_project.contractId = [contract].contractId

注:contract在Sql server中是关键字,因此使用了中括号。

2、使用Left join

Left join是以左表为准的。换句话说,左表(project)的记录将会全部表示出来,而右表(contract_project)只会显示符合搜索条件的记录

(例子中为: project.projectId = contract_project.projectId)。对于contract表来说,contract_project表是它的左表。

此例以两个left join 将三个表按条件联接在一起。

扩展资料

连接通常可以在select语句的from子句或where子句中建立,其语法格式为:

select colunm_name1,colunm_name2

from table_name1

left join table_name2

on table_name1.colunmname=table_name2.colunmname

其中join_table指出参与连接 *** 作的表名,连接可以对同一个表 *** 作,也可以对多表 *** 作,对同一个表 *** 作的连接称为自连接, join_type 为连接类型,可以是left join 或者right join 或者inner join 。

on (join_condition)用来指连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

参考资料:百度百科 left join

1、首先就是创建几个没有任何关系的表,但是注意,你在将要作为外键表的表上必须使用与将要作为主键表的数据类型相同。

2、将能唯一标识的那一行设置为主键,其他表类似。

3、接下来添加关系,如下图。

4、拖动需要添加的关系,直接看图。

5、关联完成,如图。

楼主好,这样写确实是耽误效率。根据楼主的要求,其实可以先全部关联,然后where筛选后在外围汇总。具体SQL如下:

select a.id,a.uName,

sum(case when b._type =1 and S = 2 then s1 else 0 end )as a, 

sum(case when b._type =1 and S = 2 then s2 else 0 end )as b,

sum(case when b._type =2 and S = 2 then s1 else 0 end )as c,

sum(case when b._type =2 and S = 2 then s2 else 0 end )as d,

sum(case when b._type =3 and S = 2 then s1 else 0 end )as e,

sum(case when b._type =3 and S = 2 then s2 else 0 end )as f,

from _User a

join _Task b on a.id=b._User

where a.T=1

group by a.id,a.uName

这样效率应该会高一些。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6931459.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存