2015-04-08 49 views
1

什么人会想到这个查询?表名可以用作别名吗?

SELECT * FROM ta LEFT JOIN 
    (SELECT * FROM tb WHERE tb.end > 10000) AS tb 
ON ta.id = tb.id 

可以使用表名(“tb”)作为别名还是存在一些看不见的后果?

原因:我有静态方法来映射的ResultSet对象到其使用的表名前缀。单独留下这些方法会很好。

+0

这是蛮好用的。但是'SELECT * FROM tb WHERE tb.end> 10000'是否返回单列? –

回答

0

是的,你可以使用任何别名,只要别名不与其他别名冲突(不包括别名表是给他们的名字别名)。这适用于单个查询范围。在你的查询中,你有2个作用域:一个用于外部查询,另一个用于内部查询,因此即使在两个作用域中出现相同的别名,也不应该有冲突。

+0

但表名称本身是独特的,至少在同一个模式。我想知道为什么表名不常用作别名,或者它们是? – inmyth

+0

通常表名作为别名(如果没有别名声明,则别名将是事实上的表名)。但是有这样的情况使用表名时是不可能的,例如,如果你有一个递归关系,如'SELECT parent.id,parent.name从一个人个人LEFT JOIN为人母ON pers.parent_id = parent.id' – Cristik

0

这是完全正常使用别名作为表名。

1

您的查询看起来不错,但你为什么不使用一个简单的LEFT JOIN

SELECT ta.* 
FROM ta 
LEFT JOIN tb ON ta.id = tb.id 
WHERE tb.end > 10000 
+0

我上面的查询未完成, – inmyth

相关问题