MySQL: получить количество строк, содержащих имя из другой таблицы, обе таблицы связаны - PullRequest
0 голосов
/ 11 января 2019

У меня есть 2 таблицы в моей базе данных, скажем, t1 и t2. Есть два ряда в обоих. 1 - это идентификатор, а 2 - это имя

.
Table t1:
Id.       Name
1.         abc
2.         def
3.         ghi

Table t2:
Id.     Name
1.       abc
2.       abc
3.       abc
4.       def
4.       def

Теперь мне нужен этот тип вывода в MySQL

Total.        Name
3.                abc
2.                def
0.                ghi

Я пробовал это до сих пор

Select Count(*) as Total, Name 
from t1 Inner Join 
     t2 
Group By t2.Name 
Having t1.Name = t2.Name

Ответы [ 2 ]

0 голосов
/ 11 января 2019
SELECT COUNT(t2.Id) as Total, t1.Name
FROM t1 LEFT JOIN t2
ON t2.Name = t1.Name
GROUP BY t1.Name;

Тот же ответ, что и у Йогеша, но с правильно установленными запятыми и заглавными буквами.

относительно ВЫБОРА, который вы сделали

Select Count(*) as Total, Name 
from t1 Inner Join 
     t2 
Group By t2.Name 
Having t1.Name = t2.Name

вот мои 2 цента

1-й.) Так как есть две таблицы с одним и тем же столбцом, вы получите неоднозначную ошибку столбца, поэтому вы должны написать «t1.Name» вместо просто «Name»

2nd.) С INNER JOIN, который вы выбираете всегда, и только те строки, которые существуют в обеих таблицах, связаны с полями в ON-части соединения

3rd.) И предложение HAVING не является подходящим способом связать таблицы вместе, используйте только полный синтаксис JOIN с ON и соответствующие поля

Надеюсь, это немного поможет.

0 голосов
/ 11 января 2019

Просто вы можете сделать LEFT JOIN & агрегирование:

SELECT COUNT(t2.id), as total t1.name
FROM t1 LEFT JOIN
     t2
     ON t2.name = t1.name
GROUP BY t1.name;
...