mysql - получить данные из 2 таблиц с 1 запросом

0

У меня есть две таблицы mysql:

Первая таблица table1:

| ID | NAME   |
| 1  | cat    |
| 2  | mouse  |
| 3  | mouse  |
| 4  | mouse  |
| 5  | mouse  |
| 6  | mouse  |

Таблица привязок 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 ответа

2

Используйте 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
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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню