Почему MySQL дает мне какой-то результат в агрегатной функции без группы по оператору - PullRequest
0 голосов
/ 05 мая 2020

я испытал что-то ... странное? с использованием агрегатной функции БЕЗ группы по оператору (да, я знаю, что мог бы). Сейчас я использую mysql 5.5.

Я использовал несколько примеров таблиц с той же структурой, что и в моей реальной ситуации, так что пример может быть extrange, извините.

Давайте объясните.

У меня есть три таблицы с некоторой ссылочной целостностью:
Как вы можете себе представить: оба, родительский, дочерний и персональный, являются FK из идентификатора таблицы Persons.

- Persons - 
id      name
1       Anna
2       Ben
3       Charly
4       Dennis
5       Emma
6       Fiona
- Relationships -
parent  child
1       3
1       4
2       5
- Log -
person  date
1       2020-05-05

У Анны двое детей, Чарли и Деннис
Один ребенок у Бена, Эмма
У Фионы нет
Только у Анны есть запись в журнале

Давай устроим вечеринку.

Найти детей с идентификатором 3, имя ТОЛЬКО если номер 6 - его родитель (ищу Чарли, если сын Фионы)

select P.name, R.child, R.parent
from Persons P
    join Relationships R on P.id = R.child
    left join Log L on L.person = P.id
where R.parent = 1
    and R.child = 3

Результат не показан, хорошо, это то, что я ожидал, потому что, как мы видим, нет строки, соответствующей условию.

Добавление агрегатной функции и группы по показывает те же результаты 0.

select P.name, R.child, R.parent, count(L.person) as N_Entries
from Persons P
    join Relationships R on P.id = R.child
    left join Log on L.person = P.id
where R.parent = 1
    and R.child = 3
group by P.id

НО

, если я удалю группу по условию i ожидать того же результата
, если результата нет, группировка не должна быть cesary.

select P.name, R.child, R.parent, count(L.person) as N_Entries
from Persons P
    join Relationships R on P.id = R.child
    left join Log on L.person = P.id
where R.parent = 1
    and R.child = 3
name    child    parent   N_Entries
Charly  null     null     0


Почему он что-то возвращает?

Спасибо и извините за мой плохой engli sh.

...