2011-10-15 90 views
0

我想加入3個表。項目,狀態,客戶。查詢的目標應導致當前狀態爲「已收到」的所有項目。我也試圖抓住客戶的名字在結果表中顯示。MySql加入問題3表

這些表的常用外鍵爲:client_ID,status_ID。

這是我迄今爲止的查詢。我正在努力更好地理解聯接。如果你可以提供關於我在做什麼錯誤的評論以及將非常感興趣的示例代碼。

SELECT clients.clientName, 
      clients.Client_ID, 
      projects.Client_ID, 
      projects.projectNumber, 
      projects.projectName, 
      projects.expectedDate, 
      statuses.Status_ID, 
      statuses.status   
    FROM projects, 
      clients, 
      statuses 
LEFT JOIN clients on projects.Client_ID = clients.Client_ID 
LEFT JOIN statuses on projects.Status_ID = statuses.Status_ID 
    WHERE status = 'Received' 
+0

你能否給我們提供你所有的DB表格結構..? – Chandresh

+3

您正在混合使用ANSI-89(FROM子句中的逗號)和ANSI-92 JOIN(JOIN語法)語法。在沒有WHERE標準的情況下,ANSI-89是一個笛卡爾產品。 –

回答

2

嘗試使用'JOIN'而不是'LEFT JOIN'。還要刪除from子句中的客戶端和狀態。我還會查詢Status_ID而不是狀態名稱。

SELECT clients.clientName, 
      clients.Client_ID, 
      projects.Client_ID, 
      projects.projectNumber, 
      projects.projectName, 
      projects.expectedDate, 
      statuses.Status_ID, 
      statuses.status   
    FROM projects 
    JOIN clients on projects.Client_ID = clients.Client_ID 
    JOIN statuses on projects.Status_ID = statuses.Status_ID 
    WHERE statuses.status = 'Received' 
0

只是試着用下面的代碼。

刪除LEFT JOIN,只是用WHERE和INNER JOIN條件...

SELECT clients.clientName, 
      clients.Client_ID, 
      projects.Client_ID, 
      projects.projectNumber, 
      projects.projectName, 
      projects.expectedDate, 
      statuses.Status_ID, 
      statuses.status   
    FROM projects, 
      clients, 
      statuses 
     WHERE 
      clients on projects.Client_ID = clients.Client_ID AND 
      statuses on projects.Status_ID = statuses.Status_ID AND 
      status = 'Received' 

這可能會對你有所幫助,並給你所想,以等待記錄。

0

您應該只在FROM子句中有一個表名,否則您將多次連接表(ANSI語法)。另外它有助於設置連接條件(更容易閱讀我認爲);並擴展表名(projects.status = ...)而不是(status = ...)。

另外,正如已經指出的那樣,如果'projects'行要被返回,那麼「JOIN」而不是「LEFT JOIN」會強制相應的行存在。

SELECT clients.clientName, clients.Client_ID, projects.Client_ID, 
     projects.projectNumber,projects.projectName, projects.expectedDate, 
     statuses.Status_ID, statuses.status 

FROM projects 

LEFT JOIN clients ON clients.Client_ID = projects.Client_ID 

LEFT JOIN statuses ON statuses.Status_ID = projects.Status_ID 

WHERE statuses.status = 'Received' 
+0

我不認爲projects.status存在。 – rwilliams

+0

對不起,我擴大了錯誤的表名。編輯答案:) –