sql 多表查询

[复制链接]
查看11 | 回复4 | 2010-11-6 22:32:56 | 显示全部楼层 |阅读模式
假如存在三个表A1(B,B1,B2...), A2( B,c,..) A3(B,d...), 也就是这三个表中都有B这个字段, 如果现在要从这三个表查数据,我想问下where 语句中应该怎么关联,是三个表任意关联还是怎么写? 比如A1.B = A2.BandA1.B = A3.B
或者 A1.B = A2.Band A2.B = A3.B
,再或者 A1.B = A2.Band A1.B = A3.Band A2.B = A3.B ; 我想问下这三种写法是不是一样的?或者都不对?

回复

使用道具 举报

千问 | 2010-11-6 22:32:56 | 显示全部楼层
第一种就可以了, 这样连接的话是直连,也就是只有所有条件都满足的情况下才会列出结果来的。一过一般情况都是这样的,A1表里面的数据比较全,而A2,A3表里面的数据并不是那么全面(如 A1 是产品表,A2是产品配件表,A3是产品维修表,当然是A1的表信息是最全的,A2,A3表里只有一部份产品的记录--并不是所有的产品都有配件,并不是所有的产品都要维修)这个时候写成这样select * from A1 left join A2 on A1.B=A2.B left join A3 on A1.B = A3.B 这样就能确定A1表里面的数据都能列出来(A2,A3表里没如果没有和A1对应的就会显示为NULL)。大部份情况都用left join 。而且需要注意的
回复

使用道具 举报

千问 | 2010-11-6 22:32:56 | 显示全部楼层
我觉得可以用这种方式的连接查询select * from A1 inner join A2 on A1.B = A2.Binner join A3 on A2.B = A3.B比起上面你说的那种更规范一些,而且更好处理
回复

使用道具 举报

千问 | 2010-11-6 22:32:56 | 显示全部楼层
结果是一样的,效率也差不多,但最好还是写成第一种。第二种不规范,读起来不习惯;第三种后面的干脆是多余的条件。
回复

使用道具 举报

千问 | 2010-11-6 22:32:56 | 显示全部楼层
我觉得都该是一样的...- -其实你随意开个sql或者mysql之类的试一下就好了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行