SELECT *
FROM (
SELECT user_id
FROM favorites
WHERE user_id >1
UNION SELECT user_id
FROM favorites
WHERE user_id <9
) AS derived
是不是别名收藏夹表(例如'friends AS f1')我注意到这个查询按预期工作(即返回所有user_id),但我不知道这样做是不好的做法。当我有一些UNION时,如果我不必直接保留所有别名,那么它会让我的查询不那么混乱。什么时候使用别名有一个很好的一般规则(可能是'当使用同一个表的多个实例时'总是使用别名')?
答案 0 :(得分:5)
您不需要在联合内部使用别名。联合的每个部分本质上都是它自己的查询。
如果在查询中使用相同的表两次或者加入子查询,则只需要别名,否则不需要它(除非您需要它)。
你也不需要外部选择包装器它没有任何用处,甚至可能减慢速度。
(我假设联盟只是一个例子 - 你的where子句可以只用一个查询完成,你可能想要union all
。)