任何人都可以向我解释为什么他们的代码使用AS id
和AS r2
和USING id
:什么时候或为什么使用MySQL AS和USING?
SELECT id, username FROM friendship JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM friendship)) AS id) AS r2 USING (id);
我只是想知道使用它们,为什么使用它们的目的是什么?
任何人都可以向我解释为什么他们的代码使用AS id
和AS r2
和USING id
:什么时候或为什么使用MySQL AS和USING?
SELECT id, username FROM friendship JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM friendship)) AS id) AS r2 USING (id);
我只是想知道使用它们,为什么使用它们的目的是什么?
作为只是为子查询创建一个别名,这样,你可以使用相同的别名'ID'与使用命令。
基本上查询需要友谊表加入id列上的子查询,因为子查询只返回一个结果,它可以与友谊表中的id列连接。
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或不惜一切条款(这是自然连接是)
在我的情况下,两者都是同一张表,为什么需要在同一个表中加入id,因为id是一样的? – zac1987
为什么需要建立一个别名?即使没有使用As id,子查询也会返回相同的结果,但如果没有写入id,那么子查询仍然可以加入友谊表中的id列,那么为什么他们需要编写为id?与As id和没有As id有什么不同? – zac1987
@ Zac1987确实,两者都有id列,但是因为join子句不在现有表中,而是在子查询结果中需要指定连接条件。我很确定它不会工作。 –
所以'因为id'是指定'JOIN'条件?通常我们指定'JOIN'条件,如'ON table1.id = table2.id'; 所以'AS ID'就像'table2.id'一样? – zac1987