如何将连接表的条件计数放在同一连接表的单独列中

时间:2012-10-10 19:24:11

标签: mysql

让我们说,我有两张牌桌 - peoplebonus

------------
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;

但是如何获得连接表的第五列?它实际上算不了。加入表中每个公司ID的奖励ID。

1 个答案:

答案 0 :(得分:1)

我只能假设你告诉我们部分图片,所以我将保留对数据库架构,规范化等的判断。

鉴于所呈现的事实,您可以按以下方式检索信息。

注意:这是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