如题,假设有三个表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 ....
但是运行时不会得出预期的结果,恳请各位大大指点。
你把你要的项目加上就可以阿
[code="sql"]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[/code]
试一下这个写法
[code="sql"]SELECT A.*
FROM A
LEFT JOIN (SELECT B.*
FROM B
INNER JOIN C ON B.id = C.id) M ON A.id = M.id[/code]
条件写错了,改下
[code="sql"]SELECT A.*
FROM A
LEFT JOIN (SELECT B.*
FROM B
INNER JOIN C ON B.name = C.name) M ON A.id = M.id[/code]
可能是优先级导致问题,先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
[quote]
但是这样就又重新多判断了一次,所以我想有没有其他更好的方法。 [/quote]
看看上帖
[quote]这个就不大好了,因为我是要把A作为主表的,它还要连接其他的表,如D啊、E啊什么的. [/quote]
只跟返回结果的列顺序有关,还有主次之分吗?呵呵。
[quote]有额,比如我再要让A内连接个D之类的。。。这个不又麻烦了么。。[/quote]
如果是这样,你还是老老实实用sub query吧。只是效率不怎么样。
从全局上看,如果能不带sub query, 列顺序有变动,也不是什么大问题。