我将如何合并这些表格

时间:2019-07-19 16:50:58

标签: postgresql

系统提示您执行在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';

显然,尽管答案是正确的,但我是如何获得的却不是。 我觉得我缺少真正明显的东西,但看不到。

1 个答案:

答案 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';