我有三个名为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' "
不知道我在哪里错了。任何帮助都会很棒。
提前致谢!
答案 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;