簡體   English   中英

別名或不使用別名的SQL JOIN ON問題

[英]SQL JOIN ON issue with aliases or not using aliases

我有三個表,分別稱為“小時數”,“項目”和“客戶”。 我對SQL語句有一定的經驗,似乎無法理解為什么它不起作用。

Projects和Hours表都共享一個稱為projectid的外鍵,而Projects和Clients都共享一個稱為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;

我似乎收到一個錯誤,錯誤代碼為“#1066-不是唯一的表/別名:'h'”

不知道我在哪里錯了。 任何幫助都會很棒。

提前致謝!

您正在混合隱式聯接和顯式聯接。 一個簡單的規則:不要在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> ,而不是相反。

您需要將表名放在字段/列的前面,而不要放在最后,通常,您將使用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;

您正在反向使用別名。 您需要使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM