2011-04-04 141 views
4

我一直在經歷一些代碼,並在查詢中反覆看到字母'r',而且我從未見過它。我不是mysql大師,在這種情況下無法在網絡上找到真正有意義的參考。mysql:'r'是什麼意思?

樣品查詢:

 
SELECT * FROM database.table r 
WHERE column = 'whatever' 
AND otherColumn = 'whenever' 
ORDER BY id, name 
+0

它看起來就像是'database.table'的別名,也可以用''database.table AS r'來完成,這通常需要你輸入'r.column'或'r。 id',但這不是在這個例子中的情況,所以我不知道。 – 2011-04-04 22:28:34

回答

8

這實際上意味着該表被從其長表單替換爲字母/符號'r'。

這是一個red herring你的情況,因爲'r'沒有用在查詢的任何地方,它不需要。您的查詢不是使用別名的好例子,因爲只涉及一個表。如果你加入多個表,那麼別名就變得方便(雖然不是必需的),以指定你在各種查詢的子句中引用哪個表的列。

您可以簡單地刪除'r'並運行您的查詢。

SELECT * FROM database.table r 
WHERE column = 'whatever' 
AND otherColumn = 'whenever' 
ORDER BY id, name 

或者用它徹底,如:(雖然它是多餘的位置)

SELECT * FROM database.table r 
WHERE r.column = 'whatever' 
AND r.otherColumn = 'whenever' 
ORDER BY r.id, r.name 

順便說一句,像這樣的SQL代碼的原因是我傾向於使用關鍵字才能突出,我走樣事實。所以FROM子句看起來像這樣:FROM database.table AS r

至於什麼是未使用的別名正在做什麼有一個很好的問題。我的猜測是,它被剪切,複製並粘貼了一些使用了別名的舊查詢,但是當它變得沒有必要時,從來沒有人打算刪除它。

+0

作爲完美的解釋,我可以想象得到,謝謝Paul。 – Jeff 2011-04-04 22:38:37

+0

@Jeff:感謝您的反饋和複選標記!我讓你成爲AS的粉絲關鍵字? – 2011-04-04 22:41:01

+0

絕對!如果AS關鍵字在那裏,我可能會知道這意味着什麼(然而,爲什麼表沒有加前綴對我來說仍然是個謎)。查詢來自一些PHP腳本,所以如果涉及其他表格,這將是有意義的,但我沒有看到任何跡象,所以你猜測它是複製/粘貼情況可能是正確的。 – Jeff 2011-04-04 22:57:39

4

r是一個別名,你可以給一個表。您可以稍後通過該別名參考表列,例如r.column1

4

這是一個表別名。如果你加入兩個重複列名的表,你可以通過說some_table.id來消除歧義,表別名允許你輸入r.id。

4

這是一個別名。這意味着:我們必須現在使用r而不是database.table

我們可以使用r.column但我們仍然被允許使用只是column如果沒有歧義。

SELECT * FROM database.table r 
WHERE r.column = 'whatever'   --using the alias r 
AND otherColumn = 'whenever'  --not using it 
ORDER BY id, r.name     --mixing 
+3

不僅「你可以」使用'r',你「必須」只使用'r'。別名爲'r'的原始引用不再可用。 – RichardTheKiwi 2011-04-04 22:28:49

+0

@Richard aka cyberkiwi:好吧,我會死的!你是對的。從來不知道那個。 – 2011-04-04 22:35:05

+0

@Richard:thnx將'can'更正爲'must' – 2011-04-04 22:40:47

1

看起來像我的表別名,省略了AS關鍵字。在示例查詢中,別名是不必要的,因爲只有一個表正被引用,並且別名從不使用。

table_reference的相關語法在MySQL documentation中指定爲tbl_name [[AS] alias] [index_hint_list]