我有一个名为add_project
的表格:
+------------+---------+-------------------+--------------+ | project_id | user_id | project_status_id | project_name | +------------+---------+-------------------+--------------+ | 1 | 1 | 3 | abc | | 2 | 1 | 0 | def | | 3 | 1 | 1 | xyz | | 4 | 1 | 3 | lmn | | 5 | 1 | 0 | trs | | 6 | 1 | 3 | ght | +------------+---------+-------------------+--------------+
在此表中,admin添加新项目。 admin 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 | +----------+------------+---------+
此表在此表中,admin将项目分配给不同的用户。
现在我想要的是找出每个用户完成的已完成项目的数量。如您所见,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上查看。
等待你的回复。
答案 0 :(得分:1)
我猜两个表都有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';
答案 1 :(得分:1)
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';
答案 2 :(得分:0)
此错误基本上意味着您选择的两个表具有相同的列名。
在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是您要使用的正确表)
答案 3 :(得分:0)
使用了这个
将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'