请教一下,嵌套查询,请各位帮我扫扫盲..

xiangfeidecainiao 2011-11-21 02:58:03

select * from
T1
left join (
select * from (select * from (select * from T2 where T1.id = T2.id))
) on 1=1

或者

select
(
select * from (select * from (select * from T2 where T1.id = T2.id))
)
from
T1


比如说我要进行这样的查询,sql会提示T1.id 无效.

请问如何做T1.id才可以用,请各位帮我扫扫盲.. 谢谢了....
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenChiM888 2011-11-21
  • 打赏
  • 举报
回复
你的第一个sql
t1->t2->t2的select->t2的where条件(注意这时候t1的id 还未获取)因此报错

你的第二个sql
t1->t1的select->t2->t2的select->t2的where条件(注意这时候t1的id 已经执行到)因此执行正确

这个分析请忽略,分析有误!
BenChiM888 2011-11-21
  • 打赏
  • 举报
回复

--手里没有你的T1 T2 表,以dual表为例 下面的sql是运行正常的。
SELECT (SELECT *
FROM (SELECT *
FROM (SELECT * FROM DUAL T2 WHERE T1.DUMMY = T2.DUMMY)))
FROM DUAL T1;

--sql的执行顺序
from -> where -> select -> group by -> having -> order by
你的第一个sql

t1->t2->t2的select->t2的where条件(注意这时候t1的id 还未获取)因此报错

你的第二个sql
t1->t1的select->t2->t2的select->t2的where条件(注意这时候t1的id 已经执行到)因此执行正确


[Quote=引用 2 楼 xiangfeidecainiao 的回复:]
引用 1 楼 benchim888 的回复:

第二中写法没问题,是正确的。
地中改一下

SQL code

SELECT *
FROM T1
LEFT JOIN (SELECT *
FROM (SELECT *
FROM (SELECT T2.* FROM T2, T1 WHERE T1.ID = T2.ID)))
ON 1 = 1;


……

兄台谢谢你这……
[/Quote]
xiangfeidecainiao 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 benchim888 的回复:]

第二中写法没问题,是正确的。
地中改一下

SQL code

SELECT *
FROM T1
LEFT JOIN (SELECT *
FROM (SELECT *
FROM (SELECT T2.* FROM T2, T1 WHERE T1.ID = T2.ID)))
ON 1 = 1;


……
[/Quote]
兄台谢谢你这么快的回复.
不过还是有个问题
1. 第2种写发我运行的时候和第1种提示一样的错误.
2. 可否帮我答疑一下.为什么会出错,推荐下文章也很好..谢谢了..
BenChiM888 2011-11-21
  • 打赏
  • 举报
回复
第二中写法没问题,是正确的。
地中改一下


SELECT *
FROM T1
LEFT JOIN (SELECT *
FROM (SELECT *
FROM (SELECT T2.* FROM T2, T1 WHERE T1.ID = T2.ID)))
ON 1 = 1;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧