我要做的是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
以及其他子查询,我会发现该列是错误的。
您可以在同一查询中同时使用USING
和ON
吗?我可以按照上面的尝试重命名该列吗?
这是完整的查询。罪魁祸首是第二个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;
答案 0 :(得分:1)
为了澄清,你并没有真正重命名任何列,只是别名它们。是的,因为您使用的是子查询,所以您可以在外部查询的ON
或USING
子句中使用列别名。
我建议您使用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