选择未在其他表中显示的行

时间:2019-10-22 20:53:15

标签: sql sql-server tsql

这是问题所在:我有足球比赛表,每一行都有一个国家和比赛ID,例如:

ID1 Russia;
ID1 Egypt 

意味着这是俄罗斯和埃及之间的比赛。但是在表格中,我仅针对进球得分的球队提供行。例如,如果表中是美国-加拿大2-0,我将拥有:

ID2 USA GOALS: 2

我有一张所有游戏的表格,其中有ID2 Canada,但没有进球。我想做的是将零目标的新表行添加到未得分的国家/地区,例如:

ID2 USA GOALS:2;
ID2 CANADA GOALS:0 

但是我有点奇怪。以下是一些屏幕截图:

Columns: Date, Group, Country, Id, Goals. This is table of countries who scored

Table of all games: Id, Group, Country, Date

现在,我要检查第一张表中是否有ID和国家/地区的行,如果没有,则表示国家/地区未得分,我应该添加具有该ID,国家/地区和零目标的新行。我尝试过类似的方法,但是没有用:

select #AllCountries.Date, #AllCountries.Group, #Country, #Id, 0 as Goals
    from #AllCountries inner join #CountriesWhoScored
    ON #AllCountries.Id = #WhoScored.Id
    WHERE #AllCountries.Id = #WhoScored.Id AND #AllCountries.Country != #WhoScored.Country

但是我得到的表中已经存在得分的国家/地区重复的行:

For example at least one country of 4ID shouldnt be here

P.S:是SQL Server 17,我在SSMS中工作

1 个答案:

答案 0 :(得分:4)

我认为您只需要一个left joincoalesce()

select c.*, coalesce(s.Goals, 0)
from #AllCountries c
left join #CountriesWhoScored s on s.Id = c.Id and s.Country = c.Country

对于一个没有得分的国家,s.Goals最终以null结尾:那么您可以使用coalesce()将其转换为0