1

たとえば、2 つのテーブルがあるpeopleとします。bonus

------------
people
------------
people_id | company_id  | job_id
  1       |     1       |    2
  2       |     1       |    4
  3       |     2       |    1
  4       |     2       |    3
  5       |     3       |    5

------------
bonus
------------
job_id    | bonus_id 
  1       |     101    
  2       |     102    
  3       |     103

今、次のような結合テーブルが必要です

-------------
JOINED TABLE 
-------------
people_id | company_id  | job_id | bonus_id | no_of_bonus_for_company
  1       |     1       |    2   |   102    |      1
  2       |     1       |    4   |   NULL   |      1
  3       |     2       |    1   |   101    |      2
  4       |     2       |    3   |   103    |      2
  5       |     3       |    5   |   NULL   |      0

主な検索用語を次のように含める必要がありますpeople_id-

SELECT p.people_id,
       p.company_id,
       p.job_id,
       b.bonus_id
FROM people p
LEFT JOIN bonus b
     ON p.job_id = b.job_id
WHERE p.people_id IN (1,2,3,4,5)
ORDER BY p.people_id ASC;

しかし、結合されたテーブルの 5 番目の列を取得するにはどうすればよいでしょうか? それは実際にいいえを数えます。結合されたテーブル自体の各会社 ID のボーナス ID。

4

1 に答える 1

1

私はあなたが私たちに絵の一部を言っていると仮定することができるだけなので、DBスキーマ、正規化などについての判断を保留します。

提示された事実を前提として、次の方法で情報を取得できます。

:これはTSQL構文ですが、mySQL構文はそれほど異なる必要はないと思います。つまりISNULL-> IFNULL

   SELECT p.people_id
        , p.company_id
        , p.job_id
        , b.bonus_id
        , ISNULL((
                   SELECT COUNT(pt.Job_Id)
                     FROM Bonus bt 
               INNER JOIN People pt
                       ON pt.job_Id = bt.job_Id
                    WHERE pt.company_Id = p.company_Id
                 GROUP BY pt.company_Id                 
                 ), 0) AS no_of_bonus_for_company
     FROM People p 
LEFT JOIN Bonus b
       ON p.job_Id = b.job_Id
于 2012-10-10T20:20:47.813 に答える