任何人都可以详细解释为什么以下查询不起作用吗?
select dept_id, distinct job_id from employees
另外请建议一些有助于理解SQL查询内部工作的资源吗?
答案 0 :(得分:2)
SELECT DISTINCT用于获取唯一行的集合。换句话说,DISTINCT选项会从结果中剪切可重复的行。由于数据的不确定性,大多数情况下(大部分数据库都是实际的)你不能使用不是全部而是只使用一些列。
例如,如果您的员工表看起来像
Emp_id Dept_id Job_id
1 24 117
2 24 117
3 24 118
4 25 117
并且您希望获得每个部门的独特工作列表,首先您应该尝试
SELECT Dept_id, Job_id
FROM Employees
所以结果如下:
24 117
24 117
24 118
25 117
请注意,现在排" 24 117"由于两名员工在一个部门工作相同,因此增加了一倍。因此,DISTINCT将删除结果中的重复行:
SELECT DISTINCT Dept_id, Job_id
FROM Employees
给出:
24 117
24 118
25 117
但是如果你想让DB给你
的结果SELECT Dept_id, DISTINCT Job_id
您的数据库无法猜测您想要与117 Job_id配对的Dept_id究竟是什么(选择是" 24或24或25?")。因此,如果您只想获得不同的job_id和一些dept_id以及它们,您应该指定您希望在结果中看到哪个dept_id,如果有更多。例如,您可能会得到最小的dept_id或类似的东西:
SELECT MIN(Dept_id) AS Dept_id, Job_id
FROM Employees
GROUP BY Job_id
结果如:
24 117
24 118
关于确定性和不确定性。在SQL查询中,您应该始终指定您想要的内容。
答案 1 :(得分:0)
据我了解,我认为您希望为所有部门获得独特的工作ID。
试试这个问题:
SELECT dept_id, job_id FROM employees Group By dept_id, job_id
表
Dept_id | JOB_ID
1 1
1 2
1 3
1 3
2 2
2 3
2 4
2 4
3 1
3 4
4 1
运行查询,您将获得以下结果。
Dept_id | JOB_ID
1 1
1 2
1 3
2 2
2 3
2 4
3 1
3 4
4 1