0

我需要显示来自父表的 sql 中子记录少于 4 或没有子记录的记录,请需要 SQL 查询。

更多说明:

  1. 根本没有父母的孩子记录也很好,所有父母记录都应该显示
  2. 如果父记录有 1 到 3 之间的子记录,应该显示
  3. 如果父记录正好有 4 个子记录,则不应显示。

架构(一名员工的捐款不能超过 4 次)

客户(client_id,电子邮件)

员工(employee_id,姓名)

捐赠(donation_id、employee_id、client_id)

SQL 我试过了。

SELECT * FROM employee left join 
(SELECT donation_id, employee_id, client_id, count(employee_id) as count from donation      GROUP BY employee_id HAVING count <= 4) as d
ON employee.employee_id = d.employee_id
4

3 回答 3

0
SELECT    a.employee_id, a.name
FROM      employee a
LEFT JOIN (
          SELECT   employee_id, COUNT(*) AS cnt
          FROM     donation
          GROUP BY employee_id
          ) b ON a.employee_id = b.employee_id
WHERE     b.cnt < 4 OR b.employee_id IS NULL

WHERE条款基本上只包括孩子少于 4 个的父母(b.cnt < 4)或根本没有孩子的父母(b.employee_id IS NULL)。

于 2012-08-05T08:45:03.673 回答
0
SELECT e.* 
  FROM employee e 
  LEFT OUTER JOIN (
    SELECT employee_id, count(parent_id) c 
    FROM donation
    GROUP BY employee_id
  ) s 
  ON s.employee_id = employee_id 
  WHERE s.c < 4 OR s.c IS NULL

并添加此索引

CREATE INDEX idx_employee_id ON donation (employee_id)
于 2012-08-05T08:52:34.400 回答
0

您可以只加入表格,按员工分组并过滤少于 4 条记录的组:

SELECT   employee.*
FROM     employee LEFT JOIN donation USING (employee_id)
GROUP BY employee_id
HAVING   COUNT(*) < 4
于 2012-08-05T08:54:16.757 回答