我有两张桌子: tab1有列:
[country]
SWE
GER
USA
另一个,tab2,列“country”和“medals”:
[country] [medals]
SWE 1
GER 2
我想列出一些奖牌数量的国家/地区。所以我做了
SELECT t2.country, t2.medals FROM tab2 as t2, tab1 as t2 WHERE t1.county = t2.country
output:
swe 1
ger 2
好的,我有一个包含2个国家/地区的列表,因为“USA”不在tab2。但我希望在我的输出中将“奖章”设置为0.如何做到这一点?
更新。 对于那个简单的查询,它工作正常。但我的查询更复杂。我尝试以同样的方式做到这一点,但它并不适合我。我试图按国家计算金牌,银牌和铜牌(场地“地点”1金,2金,3银)。另见这个主题: Select sport results ordering by medals
这是我的查询:
SELECT c.country_id as c_id,
c.image_id as i_id,
c.string_id as s_id,
COALESCE(sum(case when r.place = 1 then 1 else 0 end), 0) as gold,
COALESCE(sum(case when r.place = 2 then 1 else 0 end), 0) as silver,
COALESCE(sum(case when r.place = 3 then 1 else 0 end), 0) as bronce
FROM countries as c
LEFT OUTER JOIN results as r ON c.country_id = r.country
WHERE r.type = 'mytype'
group by r.country
ORDER BY gold DESC, silver DESC, bronce DESC, c.country_id DESC"
答案 0 :(得分:1)
您应该使用outer join
来加入失踪国家/地区。完成后,您可以使用coalesce
将生成的null
替换为0
。
SELECT tab2.country, COALESCE(tab2.medals , 0) AS medals
FROM tab2
LEFT OUTER JOIN tab1 ON tab1.county = tab2.country
答案 1 :(得分:0)
试试这个。
SELECT t2.country, isnull(t2.medals,0)
FROM tab2 as t2
LEFT JOIN tabl1 t1 on t1.country=t2.country
答案 2 :(得分:0)
使用outer join,然后使用coalesce将缺少的记录中的NULL值替换为零:
SELECT tab1.country,
coalesce(tab2.medals, 0)
FROM tab1
LEFT JOIN tab2 ON tab1.country = tab2.country
答案 3 :(得分:0)
您应该使用外部联接以加入缺少的国家/地区。完成后,您可以使用coalesce(filedName,value)或IFNULL(fieldName,value)将结果null替换为0。 提示:IFNULL()是mySql中的一个函数,ISNULL是sqlserver中的一个函数,nvl是Oracle中的一个函数,我的英文不好,所以我从@Mureinik复制了一些文本,希望对你有帮助。
SELECT t1.contry, IFNULL(t2.medals,0) FROM contry AS t1 LEFT JOIN medals AS t2 ON t1.contry = t2.contry
或
SELECT t1.contry, COALESCE(t2.medals,0) FROM contry AS t1 LEFT JOIN medals AS t2 ON t1.contry = t2.contry