繁体   English   中英

从多个表中选择时列名不明确

[英]Ambiguous Column Name When Selecting From Multiple Tables

我正在使用SQL Server 2012,并且在从不同表中选择UserName期间,出现以下错误:

消息209,级别16,状态1,第6行列名称“ UserName”不明确

SELECT *
FROM   Signup,
       Pers_D,
       Edu_D,
       Dep_S
WHERE  UserName LIKE '%Hwl123%';

这不能以这种方式完成。 逗号说-您正在尝试加入这些表。 不是工会。

您将收到错误的Ambiguous column name 'UserName'因为几个表具有该名称的列,并且服务器不知道在何处应用此过滤器。

在简单的语句中,解决方案如下所示:

SELECT *
FROM   Signup as s
WHERE  s.UserName LIKE '%Hwl123%'

UNION ALL

SELECT *
FROM   Pers_D as p
WHERE  p.UserName LIKE '%Hwl123%'

UNION ALL

SELECT *
FROM   Edu_D as e
WHERE  e.UserName LIKE '%Hwl123%'

UNION ALL

SELECT *
FROM   Dep_S as d
WHERE  d.UserName LIKE '%Hwl123%'

从字面上看,这就是您要尝试执行的操作。

但是您的方法将您引向了某个地方:

SELECT s.*, p.*, e.*, d.*
FROM   Signup s
INNER JOIN Pers_D p ON p.??? = s.???
INNER JOIN Edu_D e on e.??? = ???
INNER JOIN Dep_S d on d.??? = ???
WHERE  [???].UserName LIKE '%Hwl123%' ---<<< ambiguity: s.UserName? p.UserName? e.UserName? d.UserName?

UserName在多个表中。 尝试使用别名

我也没有看到JOIN,您将获得比预期更多的收益

SELECT *
FROM Signup A,Pers_D B,Edu_D C,Dep_S D
WHERE A.UserName LIKE '%Hwl123%';

该语法实际上为您提供了交叉连接,即每个表中的每一行乘以其他表中的每一行。 可能不是您想要的。

SELECT *为您提供4个表中的每一列。 这些表中至少有两个具有用户名列。

查看“注册”表中各列的一种简单方法是

SELECT TOP 10 * from Signup

您可以在每个表上使用它来查看哪些表中具有UserName。

您可以别名表,然后在WHERE列中指定要将UserName与哪个表进行比较。 例如:

SELECT *
FROM   Signup AS S,
       Pers_D AS P,
       Edu_D AS E,
       Dep_S AS D
WHERE  P.UserName LIKE '%Hwl123%';

除非您要使用CROSS JOIN,否则您确实应该根据表共享的列将查询重写为一系列JOIN。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM