簡體   English   中英

MySql連接問題3表

[英]MySql join issue 3 tables

我想加入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'

嘗試使用'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'

試試下面的代碼。

刪除LEFT JOIN並使用INNER JOIN的WHERE條件...

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'

這可能對您有所幫助,並記錄您想要等待的內容。

您應該只在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'

暫無
暫無

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

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