我有一个名为add_project
的表:
+------------+---------+-------------------+--------------+|project_id |user_id |project_status_id |project_name |+------------+---------+-------------------+--------------+| 1 | 1 | 3 |美国广播公司 || 2 | 1 | 0 |定义 || 3 | 1 | 1 |XYZ || 4 | 1 | 3 |LMN || 5 | 1 | 0 |TRS || 6 | 1 | 3 |GHT |+------------+---------+-------------------+--------------+
在此表上,管理员添加新项目。管理员user_id
是 1,所以这很常见。 project_status_id
指示该项目的完成状态(0=新建,1=工作,3=已完成(。
我还有另一张名为asign_project
的表:
+----------+------------+---------+|asign_id |project_id |user_id |+----------+------------+---------+| 1 | 1 | 5 || 2 | 5 | 9 || 3 | 2 | 5 || 4 | 4 | 5 || 5 | 6 | 9 || 6 | 3 | 9 |+----------+------------+---------+
在此表的此处,管理员将项目分配给不同的用户。
现在我想要的是找到每个用户完成了多少个已完成的项目。如您所见,project_id(1,4)
已完成 user_id=5
.
所以我的问题是如何获得这个值?
以下是我编写的查询:
SELECT *
FROM asign_project, add_project
WHERE asign_project.project_id = add_project.project_id
AND project_status_id='3'
AND user_id='5'
但它正在显示:
#1052 - Column 'user_id' in where clause is ambiguous
在sqlfiddle上看到它。
等待您的回复。
user_id属于哪个表? 你应该添加 TABLE_XXX.user_id.
Select * FROM asign_project, add_project
WHERE
asign_project.project_id = add_project.project_id
AND
project_status_id='3'
AND
asign_project.user_id='5';
我想两个表都有user_id
列,所以你需要在表名上指定更多。
Select
*
FROM
asign_project, add_project
WHERE
asign_project.project_id = add_project.project_id
AND
project_status_id='3'
AND
asign_project.user_id='5';
使用了这个
将user_id替换为 add_project.user_id
Select
*
FROM
asign_project, add_project
WHERE
asign_project.project_id = add_project.project_id
AND
project_status_id='3'
AND
add_project.user_id='5'
此错误基本上意味着您从中选择的两个表具有相同的列名。
在 WHERE
子句中,您只需要指定要用于获取数据过滤器的表名。
例:
Select *
FROM
asign_project, add_project
WHERE
asign_project.project_id = add_project.project_id
AND
asign_project.project_status_id='3'
AND
asign_project.user_id='5'
所做的只是将 WHERE 子句中的user_id
替换为 assign_project.user_id
(假设 assign_project 是您想要使用的正确表(