我有2个mysql表:
第一个表 table1 :
| ID | NAME |
| 1 | cat |
| 2 | mouse |
| 3 | mouse |
| 4 | mouse |
| 5 | mouse |
| 6 | mouse |
secound表 table2 :
| ID | NAME_NA |
| 1 | cat |
| 2 | mouse |
| 3 | cd_rom |
| 4 | dvd_rw |
| 5 | house |
我想输出这个:
mouse - 5 entries
cat - 1 entry
cd_rom - 0 entries
dvd_rw - 0 entries
house - 0 entries
答案 0 :(得分:2)
SELECT x.name_na AS name,
COALESCE(COUNT(y.name), 0) AS num_entries
FROM TABLE2 x
LEFT JOIN TABLE1 y ON y.name = x.name_na
......得到:
name num_entries
--------------------
mouse 5
cat 1
cd_rom 0
dvd_rw 0
house 0
答案 1 :(得分:0)
SELECT `table1`.`NAME`, IFNULL(COUNT(*), 0) as entries FROM
`table2` LEFT JOIN `table1` ON `table1`.`NAME` = `table2`.`NAME_NA`
GROUP BY `table1`.`NAME`;
LEFT JOIN
为“左”表(table2
此处)中的每个项目创建行,即使table1
中没有匹配项,也会为项目创建多行table2
如果该项目的table1
中有多个匹配的行。
然后,如果您使用GROUP BY
名称COUNT()
并使用table2
功能,则可以计算table1
中IFNULL()
中每个项目匹配的匹配数量。
COUNT()
被使用,因为如果NULL
中的该项目没有任何匹配项,则table1
将返回0
,因此我们会在{{1}}中替换代替。