SQL问题 :想问多个括号嵌套的最外层的表还能在最里层表里用么

select *
from A
JOIN (
SELECT * FROM B
WHERE B.字段1=( SELECT *
FROM B
WHERE B.字段1 = A.字段1



)
我想问这样多括号的时候A的表里的字段还能在两个以上括号嵌套里使用么,现在根据我的测试只能在一个括号嵌套中能使用,但是两个或者两个以上就不行,问什么?我的测试结果是对的么?求认证和解答

不可以,join两端运算的表(或表表达式)必须是静态的,也就是说两边的表可以独立用select预览数据(有点独立子查询的意思),你这个写法,join右边的表表达式(派生表)是依赖于左表中某个字段的,也就是说,左表中每一条记录都对应着不同的右表(别和我说左表的那个字段都是一个值哈),这种需求需要用cross apply或者outer apply来实现,具体的你可以查一下apply的用法,如果你join用的比较熟的话,apply你很快就会了。
希望对你有所帮助,哈哈。追问

不对吧?我的第一层数据也是关联到最外层的A表的!如果不加第二层的话是没有问题的,所以你说的join两端可以独立SELECT出来我感觉是不是不对!我只是当用第二层去关联到最外层的时候就会有问题报的是表字段无效

追答

。。。你还是没明白联结的含义,你的第一层没有引用A表,ON后面只是个联结条件,你如果把ON后面的A表字段当成引用的话就错了,那个只是联结条件,表示A表和B表的哪些数据可以用于联结。

追问

不是只是我写的只是我SQL的一部分,第一层其实也引用了外层的,刚才我看错了现在我看是不可以引用外层的,那我想问下我想做这种动态的怎么做那?大神教我一下,APPLY是什么?是标准SQL还是?我用的是ORACLE但希望用标准SQL,

追答

如果还是不是很明白,你就当成去掉忽略on条件后,两边的查询可以独立进行select就可以进行联结。
去看看apply的用法吧,看了后你应该就明白了,我就不复制过来粘贴了,建议你同时看看独立子查询和相关子查询,理解起来是一样的。
===========================================================================
shit shit shit
我说的是sql server,apply不是标准sql,是T-SQL实现的,PL-SQL里面应该有相对应的语法吧,我百度帮你查查,你也可以自己查查,
shit啊,忘了问你用的是什么数据库了,不过join的sql标准,sql server和oracle应该是一样的,至于apply,我不清楚在oracle中是什么了。

温馨提示:答案为网友推荐,仅供参考
相似回答