SQL JOIN ON使用别名或不使用别名的问题

时间:2014-04-25 15:12:10

标签: sql join alias jointable

我有三个名为Hours,Projects和Clients的表。我对SQL语句有一定的经验,似乎无法理解为什么这不起作用。

Projects和Hours表共享一个名为projectid的外键 和项目和客户都共享一个名为clientid的外键。

到目前为止我的查询:

SELECT hoursworked.h, projectname.p, description.p, archive.p, clientname.c 
FROM hours AS h, projects AS p, clients AS c
JOIN h
ON projectid.h = projectid.p
JOIN p
ON clientid.p = clientid.c
WHERE archive.p = 0;

我似乎收到一个名为&#34的错误;#1066 - 不是唯一的表/别名:' h' "

不知道我在哪里错了。任何帮助都会很棒。

提前致谢!

3 个答案:

答案 0 :(得分:1)

您正在混合隐式连接和显式连接。一个简单的规则:不要在from子句中使用逗号。

SELECT h.hoursworked, p.projectname, p.description, p.archive, c.clientname
FROM hours h join
     projects p
     on h.projectid = p.projectid join
     clients c
     ON p.clientid = c.clientid
WHERE p.archive = 0;

此外,使用别名的语法是<table alias><column alias>,而不是相反。

答案 1 :(得分:0)

您需要将表名添加到字段/列之前,而不是将其放在最后,通常您会将AS用于字段/列别名,而不是表别名。另外,我会将JOIN中的表命名为FROM语句中没有用逗号分隔的表。这应该是它的样子:

SELECT 
    h.hoursworked, 
    p.projectname, 
    p.description, 
    p.archive, 
    c.clientname 
FROM hours h
JOIN projects p
    ON h.projectid = p.projectid
JOIN clients c
    ON p.clientid = c.clientid
WHERE p.archive = 0;

答案 2 :(得分:0)

您正在向后使用别名。您需要使用H.HoursWorked,而不是HoursWorked.H等。您的JOIN也不正确。

尝试以下方法:

SELECT  h.hoursworked, p.projectname, p.description, p.archive, c.clientname 
FROM    hours AS h
JOIN    projects AS p ON h.projectid = p.projectid
JOIN    clients AS c ON p.clientid = c.clientid
WHERE   p.archive = 0;