这条 MySQL 的子查询语句为什么会这样写?(如图)

2019-11-01 15:59:17 +08:00
 manyfreebug


customers 表和 orders 表:


5003 次点击
所在节点    MySQL
14 条回复
wqzjk393
2019-11-01 16:16:33 +08:00
select xx from a where a.xx=b.xx,就类似与 select xx from a inner join b on a.xx=b.xx 吧
justrand
2019-11-01 16:24:56 +08:00
看了没有问题啊,需要输出每一个消费者的订单数,这个 a.xx=b.xx 不就是解决输出每个人的订单数量。不然你怎么一步输出每个人的订单数量,难道一个个 cust_id 去执行吗,那如果有 1 万个客户呢,执行一万次才能得出?
justrand
2019-11-01 16:27:43 +08:00
where orders.cust_id = xxxx 这种形式一次只能统计一个用户的订单数而且必须知道 cust_id 才行
a.xx=b.xx 可以一次得出每个人的订单数量而且不需要知道具体 cust_id
littleylv
2019-11-01 16:30:02 +08:00
这……是……是很基础很基础的知识点吧。。。
mwiker
2019-11-01 16:30:56 +08:00
首先看清题目,重点[对每个客户]。
luopengfei14
2019-11-01 16:31:26 +08:00
临时性的表?
eason1874
2019-11-01 16:37:52 +08:00
没毛病,我记得是可以这样用,类似 JOIN 的 ON tableA.cust_id = tableB.cust_id


这例子里肯定要这样写啊,如果指定 cust_id 为固定值,那所有结果里的 orders 结果都是同一个客户的了。
Canvas26
2019-11-01 16:39:52 +08:00
你这是基础都没理解好吧,from 表 where 确定行,最后 select 选出需要的列
这里涉及两张表,name 和 state 在第一张表里,而订单数要到另一张表里找,根据什么找?根据两表的共同字段 id 找,当你输出 coyote inc.的时候,id 就是 10001,当你输出 E Fudd 的时候,id 就是 10005,这里就是一个“变化”的确定值
mynamewang0
2019-11-01 16:55:28 +08:00
mysql 我用的不多,不过你问的是 SQL 基本知识。过程我猜应该是,先全扫描一次 customers 表,再取得到的 cust_id 去匹配 orders 表,返回结果。整个过程应该没用到表的连接
jowenz
2019-11-01 18:43:23 +08:00
标量子查询不就这么写么,oracle 也是这么写的
JerryCha
2019-11-01 19:17:38 +08:00
这就是 SQL 牛逼的地方了( x )
Lipoic
2019-11-01 19:22:21 +08:00
楼主你看的书叫啥
leeg810312
2019-11-01 19:35:33 +08:00
不太习惯这样写,我觉得应该用 group by
manyfreebug
2019-11-02 00:14:47 +08:00
@Lipoic 刚从外面回来,《 SQL 必知必会》或者《 MySQL 必知必会》,两本书的作者是同一个人,书的很大部分是相同的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX