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