系统提示您执行在coderpad.io上的PostgreSQL中编写代码的任务,以将3个表中的信息合并为1。
如果您转到https://coderpad.io/sandbox并将语法切换为postgresql,然后输入以下内容
SELECT *
FROM TABLE_1
WHERE EXISTS -- unique field
( SELECT 1
FROM TABLE_1 T2
WHERE T1.Field2 = T2.Field2
GROUP
BY T2.Field2
HAVING COUNT(1) = 1
)
AND EXISTS -- nonunique field
( SELECT 1
FROM TABLE_1 T3
WHERE T1.Field3 = T3.Field3
GROUP
BY T3.Field3
HAVING COUNT(1) > 1
)
您将看到与我们所需员工有关的信息。
我们正在尝试制作一张表格,将负责“建设一个不错的网站”的三名员工合并为一个表格。
我刚刚在coderpad.io/sandbox上编写了此代码,并将语法切换到PostgreSQL
SELECT * FROM employees;
SELECT * FROM projects;
SELECT * FROM employees_projects;
我还被告知,以上各行(WHERE / AND)中不应有任何数字
SELECT d.name, e.first_name, p.title
FROM employees_projects ep, projects p, employees e
JOIN departments d
ON d.id = e.id
WHERE ep.project_id IN ('2')
AND e.department_id IN ('2')
AND p.id IN ('1')
;
这是所需的查询结果:
SELECT d.name, e.first_name, p.title
FROM employees e, projects p, departments d, employees_projects ep
WHERE ep.employee_id = d.id
AND p.id = '1'
AND d.id = '2'
AND e.department_id = '2';
显然,尽管答案是正确的,但我是如何获得的却不是。 我觉得我缺少真正明显的东西,但看不到。
答案 0 :(得分:0)
欢迎来到SO。请参阅[询问]的帮助部分。遵循该问题的模板将使您有更大的机会获得满意的答案(请不要将我发送到其他网站)。
在我看来,您对结果不满意,因为尽管您正在查询的某个特定项目(正在构建一个不错的网站)实际上并未出现在查询中,但是您硬编码了所需的ID。这不是一个非常令人满意的方法。我会同意的。
您缺少的是从目标(project.title)到其他表中的必要信息,遵循ID链。我不得不做一些假设,但是以下几点应该为您指明正确的方向。注意-我已将结构更新为更现代的JOIN语法):
select d.name
, e.first_name
, p.title
from projects p
join employees_projects ep on (ep.project_id = p.id)
join employees e on (ep.employee.id = e.id)
join departments d on (e.department_id = d.id)
where p.title = 'Building a cool site';