mysql - 从2个表中获取详细信息,包含1个查询

时间:2010-09-03 18:40:00

标签: sql mysql

我有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

2 个答案:

答案 0 :(得分:2)

Use a LEFT JOIN

   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功能,则可以计算table1IFNULL()中每个项目匹配的匹配数量。

COUNT()被使用,因为如果NULL中的该项目没有任何匹配项,则table1将返回0,因此我们会在{{1}}中替换代替。