Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接,包括一个表的所有元素,即使不';与where子句不匹配_Sql_Sql Server_Outer Join - Fatal编程技术网

SQL连接,包括一个表的所有元素,即使不';与where子句不匹配

SQL连接,包括一个表的所有元素,即使不';与where子句不匹配,sql,sql-server,outer-join,Sql,Sql Server,Outer Join,大家好,我知道SQL,但我在处理连接时遇到了一个具体问题,我无法在线找到解决方案 我正在使用Microsoft SQL Server Management Studio。我有两张桌子需要合并 工作台 一个作业与表匹配 在jobs表中有一个包含10个工作的列表,在job_matches表中有一个包含60个左右与这些工作匹配的人的列表。因此,我想在一列中列出这些工作,在另一列中列出与之匹配的人数。 我使用了以下查询 Select Jobs.Id , count(Job_Matches.Job_id)

大家好,我知道SQL,但我在处理连接时遇到了一个具体问题,我无法在线找到解决方案

我正在使用Microsoft SQL Server Management Studio。我有两张桌子需要合并

工作台

一个作业与表匹配

在jobs表中有一个包含10个工作的列表,在job_matches表中有一个包含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_匹配.Job_ID

它做了我想做的,除了它遗漏了任何没有匹配人员的工作。所以我得到了一个7个工作的列表,在第二列中列出了每个工作的匹配数量

这是有意义的,因为它的唯一匹配是id相等,如果没有匹配到作业的人,则id不会出现在第二个表中

所以我想知道在查询中是否有这样的说法:

if(Jobs.ID不在Job_中匹配默认值零)或类似的内容

谢谢你的阅读

如果您使用Oracle

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);
SELECT
   Jobs.Id , count(Job_Matches.Job_id)
FROM
   Jobs, Job_Matches
WHERE
   Jobs.Id = Job_Matches.job_id(+)
GROUP BY Jobs.id;
但是我建议你使用

Oracle语法很旧,它将联接与
WHERE
子句混合使用。
使用这种语法很难看到这些表是如何与复杂的查询连接在一起的

ANSI语法将
WHERE
子句与联接明确分开。Oracle 10G支持ANSI语法。我不知道以前的版本。

如果您使用Oracle

SELECT
   Jobs.Id , count(Job_Matches.Job_id)
FROM
   Jobs, Job_Matches
WHERE
   Jobs.Id = Job_Matches.job_id(+)
GROUP BY Jobs.id;
但是我建议你使用

Oracle语法很旧,它将联接与
WHERE
子句混合使用。
使用这种语法很难看到这些表是如何与复杂的查询连接在一起的


ANSI语法将
WHERE
子句与联接明确分开。Oracle 10G支持ANSI语法。我不知道以前的版本。

谢谢,这非常有效。好的,那么你认为我不应该费心学习Oracle语法而使用这个ANSI?@user183200不再使用
(+)
操作符。Oracle建议改用ANSI联接。当您使用SQL Server时,您无论如何都不能使用它。实际上,它们都是ANSI语法,旧语法来自SQL-89(及更早版本),而新语法成为SQL-92的标准语法。考虑到我们有20年的时间来调整,现在似乎是时候停止使用旧的语法了。谢谢,这很好地工作了。好的,那么你认为我不应该费心学习Oracle语法而使用这个ANSI?@user183200不再使用
(+)
操作符。Oracle建议改用ANSI联接。当您使用SQL Server时,您无论如何都不能使用它。实际上,它们都是ANSI语法,旧语法来自SQL-89(及更早版本),而新语法成为SQL-92的标准语法。考虑到我们有20年的时间来调整,似乎是时候停止使用旧的语法了。欢呼,这也起到了作用,但显然我正在学习过时的语法,所以最好重新开始。再次感谢。干杯,这也起到了作用,但显然我正在学习过时的语法,所以最好重新开始。再次感谢。