Mysql SQL语句无法从2个表中获取数据

Mysql SQL语句无法从2个表中获取数据,mysql,sql,sqlite,Mysql,Sql,Sqlite,我有两张桌子: 表1有一列: [country] SWE GER USA 另一个是表2,列有“国家”和“奖牌”: 我想要一份有奖牌数量的国家名单。我也是 SELECT t2.country, t2.medals FROM tab2 as t2, tab1 as t2 WHERE t1.county = t2.country output: swe 1 ger 2 好的,我有两个国家的名单,因为“美国”不在表2中。但我希望在输出中将“奖牌”设置为0。如何做到这一点 更新。 对于这个简

我有两张桌子: 表1有一列:

[country]
SWE
GER
USA
另一个是表2,列有“国家”和“奖牌”:

我想要一份有奖牌数量的国家名单。我也是

 SELECT t2.country, t2.medals FROM tab2 as t2, tab1 as t2 WHERE t1.county = t2.country

 output:
 swe 1
 ger 2
好的,我有两个国家的名单,因为“美国”不在表2中。但我希望在输出中将“奖牌”设置为0。如何做到这一点

更新。 对于这个简单的查询,它工作得很好。但我的问题更复杂。我试着用同样的方法做,但对我来说不起作用。我试图按国家计算金牌、银牌和铜牌(场“位”1-金、2-金、3-银)。另请参见本主题:

我的问题是:

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" 
试试这个

SELECT t2.country, isnull(t2.medals,0) 
FROM tab2 as t2
LEFT JOIN tabl1 t1 on t1.country=t2.country

您应该使用
外部联接
,以便也加入缺少的国家/地区。完成此操作后,可以使用
coalesce
将生成的
null
替换为
0

SELECT          tab2.country, COALESCE(tab2.medals , 0) AS medals
FROM            tab2 
LEFT OUTER JOIN tab1 ON tab1.county = tab2.country
使用,然后使用将丢失记录中的空值替换为零:

SELECT tab1.country,
       coalesce(tab2.medals, 0)
FROM tab1
LEFT JOIN tab2 ON tab1.country = tab2.country

您应该使用外部联接,以便也加入缺少的国家/地区。完成后,可以使用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


使用显式连接语法,而不是这种(隐式)逗号连接。那么答案就显而易见了。这个查询有什么不起作用呢?它只显示两个表中都有一个国家(如瑞典或美国)的行,但如果在表“结果”中没有国家条目,它应该显示一个0的行。。但事实并非如此:(谢谢,到目前为止,它还有效。我用对我不起作用的更复杂的查询更新了我的答案。谢谢,到目前为止,它有效。我用对我不起作用的更复杂的查询更新了我的答案。
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