SQL statemest从2个表中获取数据

时间:2014-02-03 13:48:49

标签: mysql sql sqlite

我有两张桌子: 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" 

4 个答案:

答案 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