2016-01-19 36 views
1

我已經看到了下面的例子:SQL '組由' 等效的查詢

令T是具有2個列的表 - [ID,值](均INT)

然後:

SELECT * FROM T 
WHERE id=(SELECT MAX(id) FROM T t2 where T.value=t2.value); 

等同於:

SELECT MAX(id) FROM T GROUP BY value 

這是怎麼回事幕後?我們如何引用T1.value? T1.value=t2.value是什麼意思?

+0

是不是「選擇*從T T1哪裏」? (你在那裏錯過了T1) – Roberto

+0

編輯查詢 – user265732

+0

仍然是錯誤的,我不認爲那些是相同的,你在哪裏得到那個例子? –

回答

0

@JuanCarlosOropeza是正確的,你的前提是錯誤的。這些不是等同的查詢。第二個查詢應該出錯。但更重要的是。子查詢中WHERE子句的用途是將子查詢中的行限制爲來自外部查詢的id。

+0

我明白你說的關於WHERE子句。但它如何工作? – user265732

+0

我不知道你的意思是「如何」。很明顯,一個引用是指子查詢之外的值,另一個是由於不同的別名而引用子查詢中的值。 – Rabbit

0

對於幕後發生的事情,請使用explain計劃,該計劃提供有關優化程序如何決定獲取查詢請求的數據的信息。