2013-05-22 3 views
2

У меня есть запрос на объединение слева, где таблица, которая объединяется, может содержать нулевые строки. Проблема в том, что если я выберу это, тогда нет строк, в которых таблица соединений содержит нулевые строки. Как я могу выбрать его в любом случае?MySQL Присоединиться к необязательному значению выбора

Вот мой запрос

SELECT server.id 
    , COALESCE(AVG(playerData.player) , 0) AS average 
FROM server 
LEFT JOIN playerData ON server.id = playerData.serverID 
    AND (playerData.timestamp > UNIX_TIMESTAMP() -10000) 

В playerData таблица хранится в одной строке, сколько людей были на сервере в определенное время. И несколько строк этого нужно вычислить в среднем, и это необходимо объединить с другим запросом. Когда я опускаю столбец выбора secound, он дает мне все строки (как и должно), иначе он показывает только результат, где также существуют соответствующие строки в таблице playerData.

Дополнительные данные Таблицы: Таблица playerData:

playerData table

Для другой таблицы только столбец ID имеет важное значение в этом случае.

+1

было бы здорово знать структуры таблиц! – rcpayan

+0

Ваше описание нечеткое. Пожалуйста, подумайте над предоставлением некоторых выборочных данных и желаемого результата. –

+1

Обратите внимание, что вы смешиваете ** неагрегированные ** и ** агрегированные ** столбцы в запросе ** без ** 'GROUP BY'. –

ответ

2

Попробуйте это:

SELECT server.id 
    , COALESCE(AVG(playerData.player) , 0) AS average 
FROM server 
LEFT JOIN playerData ON server.id = playerData.serverID 
    AND (playerData.timestamp > UNIX_TIMESTAMP() -10000) 
group by server.id 

Ваш запрос отсутствует пункт group by. Когда вы включаете функцию агрегации (например, AVG()), запрос автоматически становится агрегирующим запросом. Без group by все строки агрегируются в одну строку. Предположительно, вам нужна одна строка за server.id.

+0

Спасибо, в этом была проблема. (Но я стараюсь добавить дополнительную информацию в свой вопрос в любом случае, как это было предложено в комментариях, для людей, имеющих такую ​​же проблему). – Sapd

+0

Теперь это имеет смысл. Если я использую функцию агрегирования в подзапросе, он все равно рассмотрит запрос агрегирования для внешнего? –

Смежные вопросы