2011-07-04 60 views
0

任何人都可以向我解釋爲什麼他們的代碼使用AS idAS r2USING id什麼時候或爲什麼使用MySQL AS和USING?

SELECT id, username FROM friendship JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM friendship)) AS id) AS r2 USING (id); 

我只是想知道使用它們,爲什麼使用它們的目的是什麼?

回答

1

作爲只是爲子查詢創建一個別名,這樣,你可以使用相同的別名'ID'與使用命令。

基本上查詢需要友誼表加入id列上的子查詢,因爲子查詢只返回一個結果,它可以與友誼表中的id列連接。

+0

爲什麼需要建立一個別名?即使沒有使用As id,子查詢也會返回相同的結果,但如果沒有寫入id,那麼子查詢仍然可以加入友誼表中的id列,那麼爲什麼他們需要編寫爲id?與As id和沒有As id有什麼不同? – zac1987

+0

@ Zac1987確實,兩者都有id列,但是因爲join子句不在現有表中,而是在子查詢結果中需要指定連接條件。我很確定它不會工作。 –

+0

所以'因爲id'是指定'JOIN'條件?通常我們指定'JOIN'條件,如'ON table1.id = table2.id'; 所以'AS ID'就像'table2.id'一樣? – zac1987

0

OscarMk已經解釋了AS,但USING相當於ON table1.id = table2.id。通過使用USING(這裏有點冗餘......),您的RDBMS基本上將列合併爲一個列,這意味着如果您想要table1或table2中的列,則不必告訴RDBMS。簡單示例:

SELECT table1.id 
FROM table1 
INNER JOIN table2 
    ON table1.id = table2.id; 


SELECT id 
FROM table1 
INNER JOIN table2 
    USING (id); 

這些查詢是等效的。如果你忘記在第一個查詢中使用table1.id,你的RDBMS會產生一個錯誤。

通常你可以做自然連接,而不是INNER JOIN,而不是使用using或不惜一切條款(這是自然連接是)

+0

在我的情況下,兩者都是同一張表,爲什麼需要在同一個表中加入id,因爲id是一樣的? – zac1987

相關問題