我已經看到了下面的例子: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
是什麼意思?
我已經看到了下面的例子: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
是什麼意思?
@JuanCarlosOropeza是正確的,你的前提是錯誤的。這些不是等同的查詢。第二個查詢應該出錯。但更重要的是。子查詢中WHERE子句的用途是將子查詢中的行限制爲來自外部查詢的id。
我明白你說的關於WHERE子句。但它如何工作? – user265732
我不知道你的意思是「如何」。很明顯,一個引用是指子查詢之外的值,另一個是由於不同的別名而引用子查詢中的值。 – Rabbit
對於幕後發生的事情,請使用explain計劃,該計劃提供有關優化程序如何決定獲取查詢請求的數據的信息。
是不是「選擇*從T T1哪裏」? (你在那裏錯過了T1) – Roberto
編輯查詢 – user265732
仍然是錯誤的,我不認爲那些是相同的,你在哪裏得到那個例子? –