Mysql SQL语句无法从2个表中获取数据
我有两张桌子: 表1有一列: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。如何做到这一点 更新。 对于这个简
[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