我可以从多个表中检索数据而无需重复数据或多个查询吗?

时间:2016-03-13 18:34:21

标签: postgresql jdbc

我们说我有表companiesemployees,其中后者有company_id字段引用前者。我想了解一家拥有特定身份证的公司和在那里工作的人的一切。我看到两种方法可以做到这一点,但两者都有问题。

我可以通过连接一次性获取所有数据:

SELECT *
FROM companies, employees
WHERE <id> = companies.id
  AND <id> = employees.company_id

但是companies表中单行的所有数据都会在结果的每一行中重复出现(即公司的每位员工都会重复一次)。可以想象,客户可以应用某种压缩或巧妙分析来减少传输数据的数量,但我不知道这是实际完成的还是有效的。

我可以使用两个查询:

SELECT *
FROM companies
WHERE <id> = companies.id

SELECT *
FROM employees
WHERE <id> = employees.company_id

但是不得不两次前往数据库会增加延迟。

有没有解决这些低效问题的方法?我正在使用PostgreSQL,Slick(Scala)和Play。 JDBC是否避免重复数据?

1 个答案:

答案 0 :(得分:1)

执行此操作的最简单方法可能是将所有员工数据聚合到一个数组或json值中,该值将附加到公司的列中。对于jsonb

SELECT c.*, e.employee_data
FROM companies c
JOIN (
  SELECT company_id, jsonb_agg(to_jsonb(employees)) AS employee_data
  FROM employees
  GROUP BY company_id) e ON e.company_id = c.id
WHERE <id> = companies.id;