[quote=引用 14 楼 f45056231p 的回复:] 我无法理解的几点: 1.在有子查询的情况下,这比如这条例子,它的执行顺序?比如:先from(两个from一起?),where(哪个先?),最后select(哪个先),这个执行顺序? 2.就按你们所说的,子查询的那句是有4个返回值,是不是相当于把shop表对自身做了一次笛卡尔积,那后面那个where条件变成了两个shop表的联接条件?那max()的分组条件在哪呢? 3.=和in ,如果子查询有4个返回值,怎么么能用=呢?不该是只能用in吗?
[quote=引用 15 楼 f45056231p 的回复:] [quote=引用 8 楼 splendid_java 的回复:] [quote=引用 6 楼 f45056231p 的回复:] 还不太会用,不知道怎么给各位发私信求解答,只能给各位丢个板砖看能不能收到了
我无法理解的几点: 1.在有子查询的情况下,这比如这条例子,它的执行顺序?比如:先from(两个from一起?),where(哪个先?),最后select(哪个先),这个执行顺序? 2.就按你们所说的,子查询的那句是有4个返回值,是不是相当于把shop表对自身做了一次笛卡尔积,那后面那个where条件变成了两个shop表的联接条件?那max()的分组条件在哪呢? 3.=和in ,如果子查询有4个返回值,怎么么能用=呢?不该是只能用in吗?
[quote=引用 2 楼 wmxcn2000 的回复:] in 后面可以跟多个数值,也可以只跟一个值。 本例子中,max 函数已经限定了返回值,只有一个,所以用in 也可以。
还不太会用,不知道怎么给各位发私信求解答,只能给各位丢个板砖看能不能收到了
[quote=引用 8 楼 splendid_java 的回复:] [quote=引用 6 楼 f45056231p 的回复:] 还不太会用,不知道怎么给各位发私信求解答,只能给各位丢个板砖看能不能收到了
[quote=引用 6 楼 f45056231p 的回复:] 还不太会用,不知道怎么给各位发私信求解答,只能给各位丢个板砖看能不能收到了
s1 表中有 4 。 首先,取出第 1 行, xx 列的值也就有了,price 也有了,到子查询中,做一个查询,取到了 max(price) ,再拿这个值 和 s1.price 做比较,条件成立,留下这行,不成立,直接放弃 。 再取 第 2 行。 再取 第 3 行。 4 5 6 10000
[quote=引用 5 楼 f45056231p 的回复:] [quote=引用 2 楼 wmxcn2000 的回复:] in 后面可以跟多个数值,也可以只跟一个值。 本例子中,max 函数已经限定了返回值,只有一个,所以用in 也可以。
in 后面可以跟多个数值,也可以只跟一个值。 本例子中,max 函数已经限定了返回值,只有一个,所以用in 也可以。
这个查询SQL是一个包含子查询的模式,select * from a where a.XXX ...(select max(b.xxx) from b...)。 因为子查询返回的是一个max的结果,即一个值,所以可以使用“a.XXX=”,也可以用“a.XXX in”。当然使用等号查询更快点。
56,677
社区成员
56,708
社区内容
加载中
试试用AI创作助手写篇文章吧