Mysql使用重命名列

时间:2012-03-01 18:39:18

标签: mysql

我要做的是sub.blockid=id和JOIN。我已在子查询中将blockid重命名为id,但USING关键字仍在附加列id,而不是从订阅表附加重命名的id列(blockid)。

 $subscribequery = "JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub
    USING (id)";

使用ON这很容易,但我有其他JOIN子查询和USING。如果我尝试使用ON而不是USING以及其他子查询,我会发现该列是错误的。

您可以在同一查询中同时使用USINGON吗?我可以按照上面的尝试重命名该列吗?

这是完整的查询。罪魁祸首是第二个JOIN查询。

SELECT * FROM products
JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1
        USING (nid, sid)
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub
        USING (id)
WHERE id = subid AND name = max_name AND pending='0' AND deleted='0'
ORDER BY subid DESC, nid DESC;

1 个答案:

答案 0 :(得分:1)

为了澄清,你并没有真正重命名任何列,只是别名它们。是的,因为您使用的是子查询,所以您可以在外部查询的ONUSING子句中使用列别名。

我建议您使用ON而不是USING,并使用表名或表别名简单地指定每个列引用的表或子查询。

使用ON并明确指出您所引用的表也会使您的代码更具可读性,尤其是考虑到您使用的是多个连接。

以下是使用您的查询的示例:

JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1
        ON at1.nid = products.nid and at1.sid = products.sid
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub
        ON sub.id = products.id