嗨我知道SQL,但当我遇到一个我无法在线找到解决方案的特定问题时,我正在通过连接工作。
我正在使用Microsoft SQL Server Management Studio。我有两张桌子需要加入。
工作表
Job_Matches表。
作业表和job_matches表中有10个作业的列表,其中列出了大约60个与这些作业匹配的人。所以我想在一列中列出作业和另一个人匹配的人数。 我使用了以下查询
Select
Jobs.Id , count(Job_Matches.Job_id)
From
Jobs, Job_Matches
where
Jobs.Id = Job_Matches.job_id
group by (Jobs.id);
表格匹配Jobs.ID和Job_Matches.Job_Id
它做了我想要的事情,除了它遗漏了任何没有人匹配的工作。所以我得到了7个工作列表,其中包含第二列中每个工作的匹配数。
这是有意义的,因为它唯一的匹配,其中id是相等的,如果没有人匹配作业,id不会出现在第二个表中。
所以我想知道在查询中是否有这样的说法:
if(Jobs.ID不在Job_Matches中默认为零)或沿着这些行。
感谢阅读。
答案 0 :(得分:1)
如果您使用Oracle
SELECT
Jobs.Id , count(Job_Matches.Job_id)
FROM
Jobs, Job_Matches
WHERE
Jobs.Id = Job_Matches.job_id(+)
GROUP BY Jobs.id;
但我建议您使用ANSI syntax
SELECT
Jobs.Id , count(Job_Matches.Job_id)
FROM
Jobs LEFT OUTER JOIN Job_Matches ON ( Jobs.Id = Job_Matches.job_id )
GROUP BY Jobs.id;
Oracle语法很旧,它将连接与WHERE
子句混合在一起
使用此语法
ANSI语法清楚地将WHERE
子句与连接分开。 Oracle 10G支持ANSI语法。我不知道以前的版本。
答案 1 :(得分:0)
Select
Jobs.Id , count(Job_Matches.Job_id)
From
Jobs LEFT JOIN Job_Matches on
Jobs.Id = Job_Matches.job_id
group by (Jobs.id);