关于相关子查询的问题,还望各位兄弟姐妹帮帮忙,一直在线

erigido 2003-07-21 08:51:40
SELECT title, price
FROM titles
WHERE EXISTS
(SELECT *
FROM sales
WHERE sales.title_id = titles.title_id
AND qty > 30)
关于这个相关子查询我认为是在外部查询先顺序得到一条记录,然后判断记录中的title_id值是否在sales表中存在且qty>30,如果存在将外部查询的记录检索出来,然后移向下一条记录,依次最终得到符合条件的数据集.不知可不可以这样理解.如果是的话,那么这样一条sql语句应该如何理解呀?
UPDATE titleauthor
SET royaltyper = (SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titleauthor. t i t l e _ i d )
如果还是按照我刚刚的方式理解那么就和这条sql语句得出的结果:"它将t i t l e a u t h o r表中的r o y a l t y p e r列更新为指定书的销售总量"相差很远.想了半天了一直转不过弯来,谢谢各位GGJJDDMM没不吝赐教.呵呵
...全文
34 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-07-21
  • 打赏
  • 举报
回复
你写的语法都是对的,如果你是求分组合计,逻辑也是对的,我只是换了总写法,你应该能看懂
pengdali 2003-07-21
  • 打赏
  • 举报
回复
SELECT title, price
FROM titles
WHERE EXISTS
(SELECT *
FROM sales
WHERE sales.title_id = titles.title_id
AND qty > 30)

==>

select * from titles where title_id in (select title_id from sales where qty > 30)
------------------------------------------------------------
UPDATE titleauthor
SET royaltyper = (SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titleauthor. t i t l e _ i d )

==>

UPDATE titleauthor set royaltyper = tem.qty from (select title_id,sum(qty) qty from sales group by title_id) tem
where titleauthor.title_id=tem.title_id
yangvxin1 2003-07-21
  • 打赏
  • 举报
回复
UPDATE titleauthor
SET royaltyper = (SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titleauthor. t i t l e _ i d )

我个人认为这条语句的执行顺序是先从titleauthor中取出title_id.然后看title_id
是否包含在sales中的title_id中。如果在sales找到一个相同的就求出
sales中的所有的与这个tilte_id对应的Qty的和。再更新当前的titleauthor的royaltyper
的字段。所以我认为

zosky(欢迎使用银行卡) 写的下面的

UPDATE titleauthor
SET royaltyper = (SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titleauthor. t i t l e _ i d
group by sales.title_id)

Group by sales.title_id一点没有实际意义。






yehuazi 2003-07-21
  • 打赏
  • 举报
回复
第1个语句:Varchar(可变长字符串)是对的,
第2个语句:zosky(欢迎使用银行卡)是对的,group by是有用的。
erigido 2003-07-21
  • 打赏
  • 举报
回复
不好意思,头看晕了.发现是我看错了.royaltyper是列,也就是说如果按照所说的方法理解是可以的,呵呵~~~,不过不知道这样理解可以不?!
Varchar 2003-07-21
  • 打赏
  • 举报
回复
可以这么理解 exists 是找出存在就结束了
而sum 则是求所有sales.title_id = titleauthor. t i t l e _ i d
的记录的qty的和,再更新

楼上的写法group by sales.title_id实际是没有作用的



zosky 2003-07-21
  • 打赏
  • 举报
回复
UPDATE titleauthor
SET royaltyper = (SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titleauthor. t i t l e _ i d
group by sales.title_id)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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