Нет результатов (пусто) при запуске запроса - попытка получить результат из 3 таблиц - PullRequest
1 голос
/ 11 июля 2019

У меня следующий запрос MYSQL - попытка объединить 3 таблицы и найти уникальную (различную) информацию (данные)

SELECT a.LocationID, a.Model, a.SerialNum,a.Purpose, b.IP, a.Services,a.DeviceID, COUNT(a.Hostname)
FROM RefConnection.Equipment_Info a, RefConnection.Connections b, RefConnection.VM_Info c
JOIN Equipment_Info on b.Hostname = a.Hostname
WHERE a.Hostname = c.Hostname
  AND b.status = a.Status
  AND a.status = c.Status
GROUP BY a.LocationID, a.Model, a.SerialNum, a.Purpose, b.IP, a.Services, a.DeviceID
ORDER BY COUNT(b.Hostname)DESC;

Это работает с 2 таблицами:

SELECT d.locationID, d.Model, d.SerialNum, d.Status, da.IP, COUNT(d.HOSTNAME)
FROM RefConnection.Equipment_Info d, RefConnection.Connections da
WHERE d.Hostname = da.Hostname
  AND d.Status = da.Status
Group By d.locationID, d.Model, d.locationID, d.Model, d.SerialNum, d.Status, da.IP
ORDER BY COUNT(da.Hostname) DESC;

Неизвестностолбец 'b.Hostname' в 'on предложении'

Select b.LocationID, b.Model, b.SerialNum, a.Purpose, a.IP, b.Services,b.DeviceID,c.applications,c.OS, Count(a.Hostname)
FROM RefConnection.Equipment_Info b JOIN
 RefConnection.Connections a
     ON a.Hostname = b.Hostname AND
    a.status = b.Status JOIN
 RefConnection.VM_Info c
     ON b.Hostname = c.Hostname AND
    b.status = c.Status
group by b.LocationID, b.Model, b.SerialNum, a.Purpose, a.IP, b.Services, b.DeviceID, c.applications, c.OS
order by COUNT(b.Hostname)desc;

Выполнение этого запроса - ожидание того, что a покажет выход от объединения всех 3 таблиц из RefConnection, как во всех 3 таблицах (Connections, Equipment_info, VM_Info) содержит (имя хоста, статус).Таблица (Equipment_Info и VM_Info) содержит (LocationID, OS).Попытка получить уникальные (различные) имена хостов и их статус, которые должны быть связаны с идентификатором местоположения и соответствующей информацией об ОС.Не знаете, где я ошибся?

1 Ответ

0 голосов
/ 11 июля 2019

Синтаксис запятой старой школы для операции соединения логически эквивалентен более новому ключевому слову JOIN.Но есть разница в порядке приоритета.

Ссылка: https://dev.mysql.com/doc/refman/8.0/en/join.html

выдержка:

INNER JOIN и , (запятая) семантическиэквивалентно при отсутствии условия объединения: оба производят декартово произведение между указанными таблицами (то есть каждая строка в первой таблице объединяется с каждой строкой во второй таблице).

Однако, приоритет оператора запятой меньше, чем у INNER JOIN, CROSS JOIN, LEFT JOIN и т. д.Если вы смешиваете запятые соединения с другими типами соединений , когда есть условие соединения, может возникнуть ошибка вида Unknown column 'col_name' in 'on clause'.Информация о решении этой проблемы приведена далее в этом разделе.


Рекомендуется НЕ смешивать синтаксис запятых и синтаксис JOIN в одном выражении.

Рекомендуетсяновый SQL - просто избегать синтаксиса запятых.Здорово, что есть поддержка устаревшего SQL.Но новый SQL не должен его использовать.

...