Получение кол-ва совпадающих значений из 2-х таблиц - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Имеется две таблицы: В первой, назовем её

`table1`

имеется поле

id

Во второй, назовем её

`table2`

имеется поле

e_id

Требуется получить все записи из таблицы

`table1`

+ количество совпадающий значений полей

table1.id

и

table2.e_id

Я сделал так:
SELECT t1.*, COUNT(*) AS 'cnt'
 
FROM `table1` AS t1, `table2` AS t2
 
WHERE t1.id = t2.e_id GROUP BY t1.id
Но! Если в

table1.id

есть значение, которому не соответствует поле

table2.e_id

во всех записях таблицы

`table2`

, запись получена не будет. Пример: Таблица table1 table2 id e_id 1 2 2 2 3 4 4 4 5 4 6 7 Тут id: 1, 3, 5, 6 не соответствеует ни одной записи e_id Запрос должен вывести все записи таблицы

table1

+ кол-во совпадающих значений, а выводит только те записи, где

table1.id

равен 2, 4 Должно быть так: id cnt 1 0 2 2 3 0 4 3 5 0 6 0

Решение задачи: «Получение кол-ва совпадающих значений из 2-х таблиц»

textual
Листинг программы
SELECT t1.*, COUNT(t2.e_id) AS 'cnt'
 
FROM `table1` AS t1
 
LEFT JOIN `table2` AS t2 ON t1.id = t2.e_id  GROUP BY t1.id

Объяснение кода листинга программы

В данном коде выполняется запрос к двум таблицам, table1 и table2, с использованием оператора JOIN.

  1. table1 и table2 - названия таблиц, которые участвуют в запросе.
  2. t1 и t2 - псевдонимы для таблиц, которые используются в запросе.
  3. id и e_id - названия столбцов, по которым происходит соединение таблиц.
  4. LEFT JOIN - оператор, который выполняет соединение таблиц.
  5. GROUP BY - оператор, который группирует результаты запроса по столбцу t1.id.
  6. COUNT(t2.e_id) - функция, которая считает количество совпадений значений в столбце e_id из таблицы table2 для каждой группы.
  7. AS - оператор, который создает псевдоним для вычисленного значения функции COUNT(t2.e_id).
  8. 'cnt' - псевдоним для вычисленного значения функции COUNT(t2.e_id).
  9. SELECT - оператор, который указывает, какие столбцы или вычисленные значения следует включить в результаты запроса.
  10. t1.* - указание, что следует выбрать все столбцы из таблицы table1. Таким образом, данный запрос выбирает все строки из таблицы table1, а также подсчитывает количество совпадений значений в столбце e_id из таблицы table2 для каждой группы строк, определенных по столбцу id в таблице table1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы