2011-07-04 62 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

相关问题