如何在SQL内连接中添加别名?解决UNIQUE_ID列歧义问题
解决SQL歧义列名问题
这个问题在多表关联查询里太常见啦!当两个表有同名列的时候,数据库根本不知道你SELECT里的UNIQUE_ID到底是要取Foo的还是Bar的,所以才会抛出“ambiguous column name”错误。
其实你完全不需要给Foo的UNIQUE_ID加别名——因为你要的结果里根本不需要这个列呀!只要给SELECT里的列明确指定所属的表别名,就能解决问题:
SELECT B.UNIQUE_ID, B.NAME FROM BAR B INNER JOIN FOO F ON F.ID = B.FOO_ID WHERE F.UNIQUE_ID = 123;
为什么这样能行?
SELECT里的B.UNIQUE_ID和B.NAME明确告诉数据库:我要的是Bar表(别名B)里的这两个列,不会和Foo的列混淆WHERE条件里的F.UNIQUE_ID也已经指定了是Foo表(别名F)的列,逻辑清晰
如果非要给Foo的UNIQUE_ID加别名(虽然这里没必要),也可以用子查询的方式提前筛选Foo的记录,这样关联的时候就不会有列名冲突的问题了:
SELECT B.UNIQUE_ID, B.NAME FROM BAR B INNER JOIN ( SELECT ID FROM FOO WHERE UNIQUE_ID = 123 ) F ON F.ID = B.FOO_ID;
总的来说,解决这类歧义问题的核心就是:给查询里的列加上表别名,明确告诉数据库你要取哪张表的列。
内容的提问来源于stack exchange,提问作者RonApple1996
相关产品推荐
相关产品推荐

