2015-04-08 55 views
1

什麼人會想到這個查詢?表名可以用作別名嗎?

SELECT * FROM ta LEFT JOIN 
    (SELECT * FROM tb WHERE tb.end > 10000) AS tb 
ON ta.id = tb.id 

可以使用表名(「tb」)作爲別名還是存在一些看不見的後果?

原因:我有靜態方法來映射的ResultSet對象到其使用的表名前綴。單獨留下這些方法會很好。

+0

這是蠻好用的。但是'SELECT * FROM tb WHERE tb.end> 10000'是否返回單列? –

回答

0

是的,你可以使用任何別名,只要別名不與其他別名衝突(不包括別名表是給他們的名字別名)。這適用於單個查詢範圍。在你的查詢中,你有2個作用域:一個用於外部查詢,另一個用於內部查詢,因此即使在兩個作用域中出現相同的別名,也不應該有衝突。

+0

但表名稱本身是獨特的,至少在同一個模式。我想知道爲什麼表名不常用作別名,或者它們是? – inmyth

+0

通常表名作爲別名(如果沒有別名聲明,則別名將是事實上的表名)。但是有這樣的情況使用表名時是不可能的,例如,如果你有一個遞歸關係,如'SELECT parent.id,parent.name從一個人個人LEFT JOIN爲人母ON pers.parent_id = parent.id' – Cristik

0

這是完全正常使用別名作爲表名。

1

您的查詢看起來不錯,但你爲什麼不使用一個簡單的LEFT JOIN

SELECT ta.* 
FROM ta 
LEFT JOIN tb ON ta.id = tb.id 
WHERE tb.end > 10000 
+0

我上面的查詢未完成, – inmyth

相關問題