0

子レコードが 4 未満であるか、子レコードがない親テーブルの SQL のレコードを表示する必要があります。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 に答える