求教sql中,如何外连接2个需要内连接的表

问题描述

如题,假设有三个表A,B,C。A需要外连接B,而B要内连接C,sql语句应如何写。在mysql中我是这样写的:select A.* ,B.* ,C.* from A left outer join B on A.id = B.id inner join C on B.name = C.name where ....但是运行时不会得出预期的结果,恳请各位大大指点。 问题补充:hudingchen 写道

解决方案

你把你要的项目加上就可以阿SELECT A.*,M.* FROM A LEFT JOIN (SELECT B.id,B.name,C.id cid,C.name cname FROM B INNER JOIN C ON B.name = C.name) M ON A.id = M.id
解决方案二:
引用有额,比如我再要让A内连接个D之类的。。。这个不又麻烦了么。。如果是这样,你还是老老实实用sub query吧。只是效率不怎么样。从全局上看,如果能不带sub query, 列顺序有变动,也不是什么大问题。
解决方案三:
引用这个就不大好了,因为我是要把A作为主表的,它还要连接其他的表,如D啊、E啊什么的. 只跟返回结果的列顺序有关,还有主次之分吗?呵呵。
解决方案四:
引用但是这样就又重新多判断了一次,所以我想有没有其他更好的方法。 看看上帖
解决方案五:
可能是优先级导致问题,先innerjoin再right join试试,避免使用sub select.用:select B.*, C.*, A.* from B inner join C on B.name = c.name right join A on B.id = a.id
解决方案六:
条件写错了,改下SELECT A.* FROM A LEFT JOIN (SELECT B.* FROM B INNER JOIN C ON B.name = C.name) M ON A.id = M.id
解决方案七:
试一下这个写法SELECT A.* FROM A LEFT JOIN (SELECT B.* FROM B INNER JOIN C ON B.id = C.id) M ON A.id = M.id

时间: 2024-08-31 01:29:57

求教sql中,如何外连接2个需要内连接的表的相关文章

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍_MsSql

1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name c. 差集NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2) d. 笛卡尔积 SELECT

SQL中内连接,左连接和右连接的区别

MYSQL中可以通过内外键链接,将有关系的表中数据合并到一起进行条件筛选: 首先创建两个新表,数据如下: student 表数据: score 表数据: 可以看到students表中stu_id为16048008的记录对应score表没有数据; 1.当进行内连接时,系统会自动忽略两个表中对应不起来的数据: -- 显示内连接所有数据: SELECT * FROM students st INNER JOIN score sc ON st.sid=sc.stu_id;   数据太多,只截图最末尾的:

SQL应用与开发:(五)多个数据表的连接

数据库中的各个表中存储着不同的数据,用户往往需要用多个表中的数据来组合.提炼出所需要的信息.如果一个查询需要对多个表进行操作,就称为连接查询.连接查询的结果集或结果表称为表之间的连接.查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系型数据库查询最主要的特征. 实现连接的结果是在向数据库增添新类型的数据方面没有限制,具有很大的灵活性.通常总是通过连接创建一个新表,以包含不同表中的数据.如果新表有合适的域,就可以将它连接到现有的表. 1.简单连接操作 最简单的连接方式是在SELECT语

SQL中多表联结查询的效率笔记

最近做网站的时候遇到一个问题,我需要输出B表和C表中的两个字段,不过纠结的是,程序所得到的参数是A表中的id,而A表与B表及C表关联的是另一个字段.如此一来,我就需要从3个表中读取数据,刚开始我想用SQL的多表联结查询,可是又担心效率太低.如果我先读出A表中与B.C关联的字段的值,再运行另一条SQL语句使用该值读取B.C表中的值效率是否会高一些?思索良久,最终决定写一个程序来测试. 以下代码以Discuz!X2.5的数据库为例,查询tid为1的主题发表者的username.  代码如下 复制代码

用实验方法加深理解Oracle的外连接(left/right/full)和内连接(inner)

总是对Oracle的左连接.右连接以及(+)对应的外连接类型糊涂,通过实验加深对连接类型语法的理解.外连接分为三种: 1. 左外连接,对应SQL关键字:LEFT (OUTER) JOIN 2. 右外连接,对应SQL关键字:RIGHT (OUTER) JOIN 3. 全外连接,对应SQL关键字:FULL (OUTER) JOIN 左右外连接都是以一张表为基表,在显示基表所有记录外,加上另外一张表中匹配的记录.如果基表的数据在另一张表中没有记录,那么相关联的结果集行中显示为空值. 精确点说,引用MO

MYSQL 左连接右连接和内连接的详解及区别_Mysql

MYSQL 左连接右连接和内连接的区别,这里就对这些概念经过一个实例,讲解清楚. 代码如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE

Oracle之3种表连接方式(排序合并连接、嵌套循环、哈希连接)

Oracle之3种表连接方式(排序合并连接.嵌套循环.哈希连接) 排序合并连接 1.2.4.2.1  排序合并连接 排序合并连接(Sort Merge Join)是一种两个表在做表连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的表连接方法. 如果两个表(这里将它们分别命名为表T1和表T2)在做表连接时使用的是排序合并连接,则Oracle会依次顺序执行如下步骤. (1)首先以目标SQL中指定的谓词条件(如果有的话)去访问表T1,然后对访问结果按照表T1中的连接列来排序,排好序

你真的会玩SQL吗?内连接、外连接

原文:你真的会玩SQL吗?内连接.外连接 大多数人一般写多表查询会这样写select * from tbA ,tbB  没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲.   连接类型: 交叉联接 得到所连接表的所有组合 (笛卡儿集)cross join 内联接得到连接表的满足条件的记录组合inner join  on 外联接(左.右)得到一个表的所有行,及其余表满 足连接条件的行 full | left | right  outer join  on