All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
通过ADO.NET存取文件_[Asp.Net教程]
SQL大全[1]_mssql学习_编程技术
C#网络应用编程基础练习题与答案(五)_.net资料_编程技术
ASP.NET,2.0,WebService中传递DataTable参考_[Asp.Net教程]
用PHP+MySQL搭建聊天室_php资料_编程技术
编写高性能,Web,应用程序的10个技巧_[Asp.Net教程]
6条ASP.NET编程实用技巧_[Asp.Net教程]
vbscript下将小写金额转成大写金额_JavaScript技术_编程技术
PHP爱好者简单学习PHP处理表单的方法_php资料_编程技术
DropDownList绑定数据库字段获取下拉列表值_[Asp.Net教程]
Reading number is top 10 pictures
乳娘帕梅拉安德森1
Fierce! China's special forces training the devil2
Sora aoi on twitter4
Li Zongrui hunting video screenshots1
From China fortress sora aoi5
NeedWallpaper11
9.3阅兵全景图7-指挥系统和后勤保障系统梯队
Chinese paper-cut grilles art appreciation3
西游四格漫画(三)
NeedWallpaper4
Download software ranking
打鸟视频
传奇私服架设教程
Tram sex maniac 2 (H) rar bag13
Wild things 2
尖东毒玫瑰B
Boxer's Top ten classic battle10
Tram sex maniac 2 (H) rar bag17
jBuilder2006
Boxer's Top ten classic battle3
C++编程教程第三版
delv published in(发表于) 2013/12/30 4:46:13 Edit(编辑)
跟我学SQL:(七)从子表里删除数据_mssql学习_编程技术

跟我学SQL:(七)从子表里删除数据_mssql学习_编程技术

跟我学SQL:(七)从子表里删除数据_mssql学习_编程技术-你的首页-uuhomepage.com
在这篇文章里我要描述一下如何从表格里删除列,要删除的这些列同时还要依赖于其他表格的标准。要解决这个问题就需要一个很聪明而且完全遵守SQL92子查询声明的应用程序。
我必须提醒读者的是,尽管查询可能会遵守SQL的标准,但是众多的数据库生产商会以不同的句法支持实现SQL。以下这个解决方案应该适合于大多数数据库;但是,如果你的结果有出入,就还是应该查看一下文档。同时,由于这个查询要处理DELETE声明,所以你应该在将其应用于真实的生产环境以前在实验数据上进行测试。
需要更多的背景信息?
查看这些文章就能快速上路:
《SQL基础I查数据查询》涉及到了DELETE查询的使用。
《使用SQL子选项来合并查询》说明子选项查询能够减少对数据库请求的数量,并提供了例子。
《SQL基础:查询多个表》提供了更多关于子选项的信息,还讲到了使用单个查询就能访问多个表格的多种其他方法。
宠物店的例子
要解释如何进行这种类型的列删除,我会使用如下这个数据库的表格,该数据库叫做PetStore,并包含有清单(inventory)信息。在叫做“品种(breed)”的表A里,我存储有每种动物的信息和宠物店库存的信息。在叫做“清单”的表B里,包含有商店里特定动物的信息。
在这个例子里,我们先假设商店把整窝Shitzu小狗都卖完了。我可以使用breed表格里的breed_id字段来删除Shitzu清单里的所有项目,就像这样:
DELETE FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);
首先,我要指定需要删除记录的表格,在这里是清单表格。然后再将识别字段breed_id同子选项子句的结果反复比对。我知道要找的是Shitzus,所以就能直接删掉他们,而不用再在单独的请求里查询breed_id。
我必须要警告你的是,以这种方式使用DELETE声明是危险的,只有在你对数据库的结构很熟悉的情况下才能使用这些声明。DELETE查询会从受影响的表格里删除掉全部列,你应该知道这对你所管理着的数据意味着什么。有个好办法是使用SELETE *这个短语替代DELETE关键字来对DELETE声明的子查询结果进行测试,这样就能保证结果里含有你要删除的所有东西,就像这样:
SELECT * FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);
DELETE和JOIN联用
有人问到了解决这个问题另一个可能的办法:把JOIN子句和DELETE声明联合使用。由于以前没有使用过这种方法,我就研究了一下,发现SQL Server的文档声明支持这个方法,尽管它不符合SQL92。在经过测试和询问各种数据库平台的老手之后,我发现把DELETE和JOIN声明联合使用在我测试过的任何平台上都行不通。
从多个表格里一次删除
以上的解决方案还没有解释如何使用父表从多个子表里删除信息。但是SQL92规范里没有提供完成这项任务的标准解决方案。
DELETE的声明不能把多个表格作为一个参数接受。作为一个具有破坏性的查询,这能保证在命令要被执行的地方不会出现歧义。此外,这个限制防止了在单个声明内将AND和多个子查询联用。如果测试SELECT声明的结果用以检查DELETE查询将要影响到的是哪些数据,你会发现SELECT会返回多个表格的清单,DELETE不会影响到的多个子查询不在其中。
有很多可能的方法能够满足你的需求,例如在表格里创建一个字段,用以指明该项目是否为活动的。或者,你可以使用一些数据库里的预存程序在每个所需的DELETE查询里迭代。




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.