带有COUNT的mySQL JOIN语句无法正确匹配

时间:2017-10-11 11:18:58

标签: mysql

我正在尝试编写一个mySQL语句,该语句从一个表中选择数据,但是计算另一个表中具有特定字段中匹配ID的条目。

这两个表格为jobsjob_cards。作业将始终是一个具有多个作业卡的单个条目,因此我需要编写一个单一语句,从作业表中选择数据,但在结果中添加另一个字段,该字段是所有相关作业卡的计数。

示例:

jobs表:

|  ID  |  customer | status | date_added |
|----------------------------------------|
|   1  |     3     | active | 2017-10-10 |
------------------------------------------

job_cards表有点复杂,但包含一个名为job_id的列,在这种情况下为1。但是我们可以说上面的工作分配了3张牌。我写了以下声明:

SELECT j.*, COUNT(jc.id) AS card_count FROM jobs j LEFT JOIN job_cards jc ON j.id = jc.job_id

但是count列只返回job_cards表中的TOTAL卡数,而不管它们分配给哪个作业。不仅如此,即使目前jobs表中有4个条目,它也只会返回一个结果。

有没有办法用单一陈述做我需要做的事情?

修改

来自job_cards表的示例数据:

|  ID  |  job_id  | customer | description | materials | notes |
|--------------------------------------------------------------|
|   1  |     1    |     3    |  blah blah  |  none     |  test |
|   2  |     1    |     3    | something   |  pipes    |  n/a  |
----------------------------------------------------------------

我想得到的结果是:

|  ID  | customer | date_added | card_count |
|-------------------------------------------|
|   1  |     3    | 2017-10-10 |      2     |
---------------------------------------------

此处的ID是作业的ID。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

SELECT *, (select count(*)
           from job_cards jc
           where jc.job_id=j.id) as card_count 
FROM jobs j
相关问题