有一张shop比表 3个字段分别是物品 , 经销商,价格.然后手册中给了一个这样的例子和解答这是按它给的SQL语句得到的查询结果.
问题:这个结果是怎么产生的?试了一下,这里的where字句用IN得到的查询也是一样的,那么怎么能用=呢,怎么解释?
解决方案 »
- <B>请求给个 MYSQL 异常处理的示例 急急急急急急!!</B>
- MySQL的GROUP_CONCAT 的奇怪的事情,末尾的都被丢弃了!
- ERROR 1146 (42S02): Table 'mysql.procs_priv' doesn't exist
- 求助 谁能帮我写一个正则表达式过滤URL,使用MYSQL的正则表达式语法
- mysql 关于insert......select 如何实现多个表向一个表插入多行数据?
- 如何把这个两条语句合起来
- mysql在unix下字符集问题
- delete inner join 语法报错,求检查~
- 求一个sql,想了半天没头绪、、
- mysql 安装问题
- 安装本地mysql数据库提示缺少libeay32.dll文件
- mysql 子查询sql怎么写
这种语句想理解它没什么别的好办法,就只能多做多想,时间长了就会了。
日常工作中,如果没有把握,那就测试,通过结果检查写的对不对
或者避免写复杂sql,利用外部语言分解复杂的需求,使用简单sql解决复杂问题
count(distinct article),有几个值,查询结果就会出现几条记录。理解?
那既然是这样,但为何可以用=呢?
而且这个条件 s1.xx = s2.xx ,s1和s2都是指的同一个表shop啊,这个表达式怎么理解?
4
5
610000
我无法理解的几点:
1.在有子查询的情况下,这比如这条例子,它的执行顺序?比如:先from(两个from一起?),where(哪个先?),最后select(哪个先),这个执行顺序?
2.就按你们所说的,子查询的那句是有4个返回值,是不是相当于把shop表对自身做了一次笛卡尔积,那后面那个where条件变成了两个shop表的联接条件?那max()的分组条件在哪呢?
3.=和in ,如果子查询有4个返回值,怎么么能用=呢?不该是只能用in吗?
count(distinct article),有几个值,查询结果就会出现几条记录。理解?
还是没懂,大佬过来帮忙看下我的新回复,可能是我没把我想问的描述清楚
count(distinct article),有几个值,查询结果就会出现几条记录。理解?
还是没懂,大佬过来帮忙看下我的新回复,可能是我没把我想问的描述清楚指出一点,对于这个疑问,你不理解的根本原因在于你是用一个静态的思维去分析这个sql,建议先看看执行计划(explain 你的sql)。
count(distinct article),有几个值,查询结果就会出现几条记录。理解?
还是没懂,大佬过来帮忙看下我的新回复,可能是我没把我想问的描述清楚指出一点,对于这个疑问,你不理解的根本原因在于你是用一个静态的思维去分析这个sql,建议先看看执行计划(explain 你的sql)。
谢谢各位,找到了一点眉目,略懂了,原来嵌套查询的子查询分相关和非相关的,这条是相关子查询,子查询需要跟据主查询而不断的执行而返回结果供主查询使用,而不像我想的都是非相关的,子查询只执行一次.
其他博客的原话
1.:非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
2.相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!
这些我能理解了
那么我的问题来了:
1.是不是这样理解:那我说的这个例子中,就意味着主查询和子查询都执行了7次,主查询每查询一次,获得一个结果集,然后按子查询的where条件筛选,返回一个max(),那总共返回了7个max值,另外3个有重复值是自动被过滤了吗