[英]Selecting and joining rows from multiple tables based on MAX(Column Name)
[英]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.