[英]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.