boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问个SQL问题
相关主题
菜鸟问.asp 里的select语句在基于SQL sever和Access语法上的不
Urgent SQL problem!
请问个join的问题
难。想了一天了。大牛请进。
[转载] strong SQL skills?
请教:如何优化,提取组间最大行
[转载] Can anyone interpret this simple SQL?
再来一个SQL Server的面试题
better solution for cross table query in sql?
SQL求助:两个表各自求Count
相关话题的讨论汇总
话题: temp话题: name话题: count话题: update话题: table
进入Database版参与讨论
1 (共1页)
r***o
发帖数: 1526
1
请教各位DB高手个SQL问题
现在有个#Temp Table
Name T_ID Count
-------------------
A
A
B
C
X
--------------------
和 Table T
T_ID Name
--------------------
1 A
2 B
3 C
---------------------
现在要Update #Temp table from T WHERE T.Name = #Temp.Name
最后#Temp table的结果应该是
Name T_ID Count
-------------------
A        1     2
A        1     2
B        2     1
C        3     1
X        NULL 0
--------------------
这个Update该怎么写?
B*****g
发帖数: 34098
2
如果觉得问题复杂,先把问题拆分。
先想想怎么得到T_ID,再想想怎么得到Count。
如果需要,怎么把两步换成一步。再想还有其他优化方法吗?

【在 r***o 的大作中提到】
: 请教各位DB高手个SQL问题
: 现在有个#Temp Table
: Name T_ID Count
: -------------------
: A
: A
: B
: C
: X
: --------------------

r***o
发帖数: 1526
3
好像只能两步了
UPDATE #Temp SET T_ID = T.T_ID FROM T INNER JOIN #Temp ON #Temp.Name = T.
Name
UPDATE #Temp SET Count = TCount FROM
(SELECT Count(*) TCount, T_ID FROM #Temp GROUP BY T_ID) T
INNER JOIN #Temp ON #Temp.T_ID = T.T_ID

【在 B*****g 的大作中提到】
: 如果觉得问题复杂,先把问题拆分。
: 先想想怎么得到T_ID,再想想怎么得到Count。
: 如果需要,怎么把两步换成一步。再想还有其他优化方法吗?

B*****g
发帖数: 34098
4
set a=a1, b=b1?

【在 r***o 的大作中提到】
: 好像只能两步了
: UPDATE #Temp SET T_ID = T.T_ID FROM T INNER JOIN #Temp ON #Temp.Name = T.
: Name
: UPDATE #Temp SET Count = TCount FROM
: (SELECT Count(*) TCount, T_ID FROM #Temp GROUP BY T_ID) T
: INNER JOIN #Temp ON #Temp.T_ID = T.T_ID

s**********o
发帖数: 14359
5
只能两步走,想飞很可能会摔在地上的,还是一步一步地爬比较容易
y****w
发帖数: 3747
6
update temp x set (t_id, count) = ( select t.t_id, count(*) from t join
temp t1 on t.name = t1.name where t1.name = x.name group by t.t_id,t.name)
B*****g
发帖数: 34098
7
你这个效率?

【在 y****w 的大作中提到】
: update temp x set (t_id, count) = ( select t.t_id, count(*) from t join
: temp t1 on t.name = t1.name where t1.name = x.name group by t.t_id,t.name)

y****w
发帖数: 3747
8
你说怎么更快?update query?
要这个query都很慢,如果索引也在,那就别update了,把结果insert/load到新表好了.

【在 B*****g 的大作中提到】
: 你这个效率?
B*****g
发帖数: 34098
9
没想呢,不过inner join不合适,0出不来

【在 y****w 的大作中提到】
: 你说怎么更快?update query?
: 要这个query都很慢,如果索引也在,那就别update了,把结果insert/load到新表好了.

y****w
发帖数: 3747
10
这是小节阿,前面后面处理下都可以阿. nullif/coalesce/case阿

【在 B*****g 的大作中提到】
: 没想呢,不过inner join不合适,0出不来
相关主题
难。想了一天了。大牛请进。
[转载] strong SQL skills?
请教:如何优化,提取组间最大行
[转载] Can anyone interpret this simple SQL?
进入Database版参与讨论
B*****g
发帖数: 34098
11
再想想,不好加的

【在 y****w 的大作中提到】
: 这是小节阿,前面后面处理下都可以阿. nullif/coalesce/case阿
y****w
发帖数: 3747
12
update temp x set (t_id, count) = ( select t.t_id, count(t1.t_id) from temp
t1 left join t on t.name = t1.name where t1.name = x.name group by t.t_id,t
.name)

【在 y****w 的大作中提到】
: 这是小节阿,前面后面处理下都可以阿. nullif/coalesce/case阿
B*****g
发帖数: 34098
13
outer join,又掉一块,这题很难呀,哈哈。我一会也琢磨一下,最近根本没心思写
SQL

temp
,t

【在 y****w 的大作中提到】
: update temp x set (t_id, count) = ( select t.t_id, count(t1.t_id) from temp
: t1 left join t on t.name = t1.name where t1.name = x.name group by t.t_id,t
: .name)

y****w
发帖数: 3747
14
update t set a=(select..), b = (select...)*写*起来会更容易些.

【在 B*****g 的大作中提到】
: outer join,又掉一块,这题很难呀,哈哈。我一会也琢磨一下,最近根本没心思写
: SQL
:
: temp
: ,t

s**********o
发帖数: 14359
15
UPDATE还是尽量不要JOIN来JION去吧,很容易出错的,而且容易自己把自己LOCK了
y****w
发帖数: 3747
16
compact的写法从锁上看应该是一样的,因为一步到位还减少了死锁的可能性--从另
一个角度看就是少了make atomic的开销.
另外对目标表也减少了i/o.

【在 s**********o 的大作中提到】
: UPDATE还是尽量不要JOIN来JION去吧,很容易出错的,而且容易自己把自己LOCK了
y****w
发帖数: 3747
17
"自己把自己LOCK"?

【在 s**********o 的大作中提到】
: UPDATE还是尽量不要JOIN来JION去吧,很容易出错的,而且容易自己把自己LOCK了
1 (共1页)
进入Database版参与讨论
相关主题
SQL求助:两个表各自求Count
这个问题可以用SQL 实现吗?
问个SQL的问题
借宝地问个面试中的sql的问题。
问个sql的问题吧,搞不出来了. (转载)
问个SQL SERVER 现场排错的问题。
一个有关查询的语句
怎样快速得到两个表的交集
Teradata 的大拿呢
How to Import a Datatable as fast as possible?
相关话题的讨论汇总
话题: temp话题: name话题: count话题: update话题: table