y*******g 发帖数: 6599 | 1 一个table中的key是auto increment, 从1到十万
随机删除一 row
要求写出sql语句找出被删的row的key
不用sql的话是老题目了,把数字加起来或者xor什么就好了.
用sql还能做这个么? 要怎么写?
谢谢 |
H*****9 发帖数: 29 | 2 sum of 1 to 100000 is 5000050000
SQL:
SELECT Sum(Table.Key) AS Sum, 5000050000-[Sum] AS RowKey
FROM Table; |
y*******g 发帖数: 6599 | 3 10万只代表数量级. 不是固定的数字呢.
【在 H*****9 的大作中提到】 : sum of 1 to 100000 is 5000050000 : SQL: : SELECT Sum(Table.Key) AS Sum, 5000050000-[Sum] AS RowKey : FROM Table;
|
B*****g 发帖数: 34098 | 4 你不说什么数据库,什么版本,怎么回答?
【在 y*******g 的大作中提到】 : 10万只代表数量级. 不是固定的数字呢.
|
y*******g 发帖数: 6599 | 5 他也没说...
【在 B*****g 的大作中提到】 : 你不说什么数据库,什么版本,怎么回答?
|
B*****g 发帖数: 34098 | 6 SELECT (1+COUNT(1))*COUNT(1)/2 - SUM(key)
FROM table;
其实我是想说要删去n个,把n个全找出来
【在 y*******g 的大作中提到】 : 他也没说...
|
x******h 发帖数: 13678 | 7 再加个max变量hoho
【在 H*****9 的大作中提到】 : sum of 1 to 100000 is 5000050000 : SQL: : SELECT Sum(Table.Key) AS Sum, 5000050000-[Sum] AS RowKey : FROM Table;
|
H*****9 发帖数: 29 | 8 that will be a complex.
you have to count current row first, as KeyCount
if KeyCunt equal to last rowkey
then last row has been deleted
else
SumNew=(1+KeyCount+1)*(1+KeyCount)/2
run SQL:
SELECT Sum(Table.Key) AS Sum, SumNew-[Sum] AS RowKey
FROM Table;
endif |
H*****9 发帖数: 29 | 9 just curious. which company you interviewed with? |
y*******g 发帖数: 6599 | 10 一个弯曲的小公司
【在 H*****9 的大作中提到】 : just curious. which company you interviewed with?
|
|
|
H*****9 发帖数: 29 | |
y*******g 发帖数: 6599 | 12 thanks
【在 H*****9 的大作中提到】 : Best wishes!
|
b***y 发帖数: 2799 | 13 select top 1 auto_num - 1 from table where auto_num <> recnum;
【在 y*******g 的大作中提到】 : 一个table中的key是auto increment, 从1到十万 : 随机删除一 row : 要求写出sql语句找出被删的row的key : 不用sql的话是老题目了,把数字加起来或者xor什么就好了. : 用sql还能做这个么? 要怎么写? : 谢谢
|
M*m 发帖数: 141 | 14 select X.a
from
(
select A as a, B as b
from A left outer join B on (A+1=B)
) as X
where X.b is null. |
L*******r 发帖数: 8961 | 15 如果是SQL Server的话,可以用Common Table Expression解决。
WITH [T] AS
(SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS ROWID FROM table)
SELECT T.[RowID]
FROM T LEFT JOIN table ON T.[ROWID] = table.[key]
WHERE table.[key] IS NULL
如果以上的SELECT没有返回结果的话,删掉的就是最后一个最大的数。因为一般
Auto Number的列都是有Index的,所以以上的操作会比较快。
不知道其他的数据库管理系统有没有CommonTableExpression。 |
L*******r 发帖数: 8961 | 16 The last number no longer exists after the deletion, but the seed remains. |
c**t 发帖数: 2744 | 17 delete TBL WHERE ... RETURNING rowid INTO
【在 y*******g 的大作中提到】 : 一个table中的key是auto increment, 从1到十万 : 随机删除一 row : 要求写出sql语句找出被删的row的key : 不用sql的话是老题目了,把数字加起来或者xor什么就好了. : 用sql还能做这个么? 要怎么写? : 谢谢
|
a******5 发帖数: 199 | 18 Is this T-SQL of SQL Server or just ANSI-SQL?
I've never seen the syntax before.
【在 L*******r 的大作中提到】 : 如果是SQL Server的话,可以用Common Table Expression解决。 : WITH [T] AS : (SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS ROWID FROM table) : SELECT T.[RowID] : FROM T LEFT JOIN table ON T.[ROWID] = table.[key] : WHERE table.[key] IS NULL : 如果以上的SELECT没有返回结果的话,删掉的就是最后一个最大的数。因为一般 : Auto Number的列都是有Index的,所以以上的操作会比较快。 : 不知道其他的数据库管理系统有没有CommonTableExpression。
|
c**t 发帖数: 2744 | 19 both SQL server 2005+ and Oracle support this syntax
【在 a******5 的大作中提到】 : Is this T-SQL of SQL Server or just ANSI-SQL? : I've never seen the syntax before.
|
a******5 发帖数: 199 | 20 Thank you.
【在 c**t 的大作中提到】 : both SQL server 2005+ and Oracle support this syntax
|