|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。数据
数据抽取
实际上的干系型数据库,数据是以干系的情势存在。一般我们都能够把它们视为一种汇合。如许,数据通常为以无序的情势存在的。这类做法的优点自不必多加会商了,不外我们也得供认,偶然如许也会带给我们一些贫苦。我比来就碰到这么一件。
我在网上赶上我的一个老同砚,他提出了如许一个成绩。有一个表(假定就叫myTable),表中有三个整型字段(假定就叫A11,A12,A13),其上有一个独一键束缚。如今他想要在这个表的数据中取一些样品。他但愿从中A13的各个取值中,各取一笔记录。然后我问他,对A11和A12有甚么请求吗?他说,没有,怎样取都能够,有无纪律都行。我想固然的说,复杂,给我二非常钟。
有一个笑话不知你们听过没有。说好久之前,一个年夜数学家授课,有先生问他能不克不及证实四色定理。他说,那简单,我如今就证给你们……然后他写啊写啊……想啊想啊……一向想到下课也没证出来,然后表面打了一个年夜年夜的响雷,他自嘲说,天主也被我的傲慢激愤了……
甚么,你问我方才的成绩怎样了?我告知你,二非常种,不不,四非常钟,不不,仿佛是一个小时……厥后到三更了,表面入手下手打雷……我对我的同砚说,老兄,我错了,让我把这成绩拿归去想一想先……
以下是一个示例,我任意录了些数据出来
A11A12A13
---------------------------------
000
001
011
111
112
122
222
221
223
213
233
331
332
323
321
322
311
312
313
一入手下手,我是想用一个SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,厥后用脚指头想了想,发明不成能。由于MAX(A11)和MAX(A12)都只依附于分组子句GROUPBYA13。明显如许MAX(A11)和MAX(A12)纷歧定会是统一笔记录中的数据。就像上面如许:
A13
---------------------------------
000
331
332
333
注重,实在3,3,3这一行是不存在的。
然后我想,SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,A12行不可?用SQLServer试了试,也不合错误。由于如许的话,它会先按A13,A12来分组所前往的了局集,以是会比我们要的数据多的多。就像上面如许
A13
---------------------------------
000
001
311
312
313
321
322
323
331
332
233
诸云云类的傻事我还干了良多,厥后我终究想分明我要甚么数据了:取A12,A13,使得在一切按A13的值分组后,取每组中最年夜的A12,然后取整纪录,使得A11是A12和A13满意前述前提后的最年夜的一个值。如许,我写出了一个语句:
SELECT
(SELECTMAX(I.A11)FROMmyTableIWHEREI.A13=O.A13ANDI.A12=MAX(O.A12))A11
,MAX(O.A12)A12
,O.A13A13
FROMmyTableO
GROUPBYO.A13
这行语句前往值以下:
A11A12A13
---------------------------------
000
331
332
233
一样的,我们能够注释它为最两个了局集,一个是SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,一个是SELECTMAX(A12),A13FROMmyTableGROUPBYA13,A12,然所按A12和A13举行等值连接,这就是:
SELECTMAX(L.A11)A11
,MAX(L.A12)A12
,L.A13A13
FROMmyTableL
JOINmyTableR
ONL.A13=R.A13
GROUPBYL.A13,L.A12
HAVINGL.A12=MAX(R.A12)
我个以为如许子对照清新,不知列位觉得怎样?
现实上,这一类的数据抽取,不成能用一个复杂查询失掉,由于个中有一个字段要同时参予分组和统计。只要(现实上是只需)把我们的成绩用SQL言语的思索体例形貌分明,谜底也就失掉了,统统就这么复杂。
关于一类完整按行随机抽取的成绩,除化为Topn成绩办理外,另有一个好主张就是在撑持物理行号的数据库体系中,用rowid或标识列之类的手艺来办理,如许对照复杂,就未几说了。
增补一句,之前我说过InterBase不撑持主动标识列,但实践上,它也能够直接的完成。在InterBase中,我们能够Create一种叫generator的全局变量,然后用一个触发器,分离一个函数叫GEN_ID的,就能够做到。虽然说有点贫苦,但并不是不成能。具体情形,人人能够查询InterBase有关手艺文档。
接待来信和我会商手艺成绩:lx1978@263.net。
我们分析上面的两个操作,都有一个“删除数据”的过程。 |
|