我正在尝试编写一个mySQL语句,该语句从一个表中选择数据,但在特定字段中使用匹配ID对另一个表的条目进行计数。
这两个表是jobs
和job_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
但计数列只返回job_cards
表中的卡总数,而不管它们被分配给哪个工作。不仅如此,即使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。
你可以试试这个:
SELECT *, (select count(*)
from job_cards jc
where jc.job_id=j.id) as card_count
FROM jobs j