2015-06-19 55 views
-1

我的實際(和碎)查詢是這樣的:更新在同一個表內連接

UPDATE t_1 SET b=(SELECT b FROM t_1 WHERE a=1) WHERE b=1 

我怎樣才使用內連接呢?

+2

我完全不明白你想要什麼。你可以添加一個例子,說明你的行應該像前後一樣嗎? – Dorus

+0

'破碎',爲什麼它壞了? –

+0

@Dorus a = 1和b = 1必須始終具有相同的數字,這很難解釋原因。這是因爲你不能做同一個表的子查詢... – Alexander

回答

1

可以作假的MySQL:

UPDATE t_1 
SET b=(SELECT b FROM (select * from t_1) t WHERE a=1) 
WHERE b=1 

聯接版本:

update t_1 
join (select * from t_1) t 
on t.a = 1 and t_1.b=1 
set t_1.b= t.b; 

哪裏是你的來源證明,所有的子查詢比連接慢?

+0

謝謝,這是真的,但我想使用內部聯接,因爲它們比子查詢更快... – Alexander

+1

@Alexander不正確 - _some_子查詢可能會比較慢,但它完全取決於編譯器如何制定計劃。 –

0

好了,你可以是這樣:

UPDATE t_1 
SET t1.b=t2.b 
FROM T_1 t1 
INNER JOIN T_1 t2 
    ON t2.a=1 
WHERE b=1 

所以,如果這是更具可讀性你,然後去了。