sql中join on两个条件怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中join on两个条件怎么写相关的知识,希望对你有一定的参考价值。

    表1 LEFT 表1.b=表2。

    表1.a=表2。

    FROM &nbsp.b WHERE 表2 JOIN&nbsp.

    a ANDON&nbsp: SELECT *&nbsp。

    结构化查询语言是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询,同时也是数据库脚本文件的扩展名。

    结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同 数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。

    1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言,1987年得到国际标准组织的支持下成为国际标准。

    结构化查询语言SQL是最重要的 关系数据库操作语言,并且它的影响已经超出 数据库领域,得到其他领域的重视和采用,如 人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。

    SQL 是1986年10 月由 美国国家标准局通过的 数据库语言美国标准,接着,国际标准化组织颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准。

参考技术A

您好:

SELECT *
  FROM 表1
  LEFT JOIN 表2 
    ON 表1.a=表2.a AND 表1.b=表2.b
 WHERE 条件

本回答被提问者采纳
参考技术B 最佳答案的那个仁兄是个啥毕

Sql关于两个left join 的问题

接着之前的问过的问题,也就是有三个表,一个库房列表room,一个货柜表hgb,一个商品表spb,已知库房表字段为:
库房名name,货柜表关键字段为所在库房kfname,货柜号hgno,商品表关键字段为所在库房kfname,商品编号spno,现在要统计每个库房多少个货柜,多少个商品,sql语句该怎么写,如果只查每个库房多少个货柜则可以
select a.name,count(b.hgno) from room a left join hgb b on a.name=b.kfname group by a.name

上面这句完全可以,关键还要查商品个数,如果写成:
select a.name,count(b.hgno),count(c.spno) from room a left join hgb b on a.name=b.kfname group by a.name left join spb c on a..name=c.name
查出的结果完全不对,请问高人,该怎么写?
上面那句我写错了,应该是:
select a.name,count(b.hgno),count(c.spno) from room a left join hgb b on a.name=b.kfname left join spb c on a.name=c.name group by a.name
就是这句也是不行的,请高人帮助!

你的错误在于货柜表hgb和商品表spb都是独立与房列表room关联的,而你却要放到一个连接语句中进行统计,这样就潜在的将货柜表hgb和商品表spb关联了
比如数据如下
room:name hgb:name ,hgno spb: name,spno
A A 1 A 1
B A 2 A 2
B 1 B 1
B 2 B 2
正常执行结果是
name count(b.hgno), count(c.spno)
A 2 2
B 2 2

但是按照你的语句是
name count(b.hgno), count(c.spno)
A 4 4
B 4 4
就是因为连续的星型连接造成的

你要实现的功能得这样
select R.name, R.Chg, S.Csp
from
(select a.name name,count(b.hgno) Chg from room a left join hgb b on a.name=b.kfname group by a.name) R,
(select a.name name,count(b.spno) Csp from room a left join spb b on a.name=b.kfname group by a.name) S
where R.name=S.name追问

感谢你的回答,你这个方法是对的,但我想再问下,假设如果我库房里还有其它的也要一起统计,那写法是不是跟你的写法相似,再加多个“(select a......) t”这种之类的呢?谢谢!

追答

嗯,可以用这种方法,因为是不同的分类,所以要在每个分类上统计,再连接

参考技术A 应该是这样才对:
select a.name,count(b.hgno),count(c.spno) from room a left join hgb b on a.name=b.kfname left join spb c on a..name=c.name group by a.name追问

不好意思,我上面写错了,我测试时就是你这样写的,但结果完全不正确,而且查出来的count(b.hgno),count(c.spno)
两个字段是一样的

以上是关于sql中join on两个条件怎么写的主要内容,如果未能解决你的问题,请参考以下文章

用join连接三个表的查询,该怎么写语句?

Sql关于两个left join 的问题

Oracle 当两个表关联时,用where条件关联快还是用join on关联快,还有其他啥区别

c# Linq left join 多个条件连接查询

shopNC中join方法怎么写

sql语句中的full join具体是怎么回事啊?