开发者

mysql - get details from 2 tables with 1 query

I have 2 mysql tables:

The first table table1:

| ID | NAME   |
| 1  | cat    |
| 2  | mouse  |
| 3  | mouse  |
| 4  | mouse  |
| 5  | mouse  开发者_JS百科|
| 6  | mouse  |

The secound table table2:

| ID | NAME_NA   |
| 1  | cat       |
| 2  | mouse     |
| 3  | cd_rom    |
| 4  | dvd_rw    |
| 5  | house     |

And i want to output this :

mouse    -   5 entries
cat      -   1 entry
cd_rom   -   0 entries
dvd_rw   -   0 entries
house    -   0 entries


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

...to get:

name     num_entries
--------------------
mouse    5 
cat      1
cd_rom   0
dvd_rw   0
house    0


SELECT `table1`.`NAME`, IFNULL(COUNT(*), 0) as entries FROM
`table2` LEFT JOIN `table1` ON `table1`.`NAME` = `table2`.`NAME_NA`
GROUP BY `table1`.`NAME`;

The LEFT JOIN creates rows for each item in the "left" table (table2 here) even if there's no match in table1, and also will create multiple rows for an item in table2 if there are multiple matching rows in table1 for that item.

Then if you GROUP BY the name and use a COUNT() function, you can get the count of how many matches each item in table2 has in table1.

The IFNULL() is utilized because COUNT() will return NULL if there weren't any matches for that item in table1, so we substitute in 0 instead.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜