我正在使用SQL Server 2012,在从不同表中选择UserName期间,我收到以下错误:
消息209,级别16,状态1,行6不明确的列名称'用户名'
SELECT *
FROM Signup,
Pers_D,
Edu_D,
Dep_S
WHERE UserName LIKE '%Hwl123%';
答案 0 :(得分:3)
这不可能以这种方式实现。逗号说 - 你正试图加入这些表格。不是工会。
您收到错误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?
答案 1 :(得分:1)
UserName位于多个表中。尝试使用别名
我也没有看到加入,你会得到比预期更多的东西
SELECT *
FROM Signup A,Pers_D B,Edu_D C,Dep_S D
WHERE A.UserName LIKE '%Hwl123%';
答案 2 :(得分:0)
该语法实际上为您提供了一个交叉连接,即每个表中的每一行TIMES其他表中的每一行。可能不是你想要的。
SELECT *为您提供了4个表中的每一列。这些表中至少有2个具有用户名列。
查看注册表中列的简单方法是
SELECT TOP 10 * from Signup
您可以在每个表上使用它来查看哪些表中包含UserName。
您可以对表进行ALIAS,然后在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。