2016-06-22 3 views
2

Существует 3 ТаблицыПрисоединение 3 таблицы на основе подсчета

ЭЛЕМЕНТ -itemID

2.INVENTORY

-quantity

3.CHARACTERS

-charID

ПУНКТ 1 --- много ИНВЕНТАРЬ 8 ---- 1 ХАРАКТЕР

Я хочу найти 10 самых сложнейших предметов, которые сложены в инвентаре персонажей и у кого этот предмет уложен в их инвентарь. Таким образом, в конце это будет что-то вроде itemID 1 имеет 4 стека, и этот charID имеет элемент, itemID 2 имеет 3 стека, и этот charID имеет элемент. В таблице.

Это где я в настоящее время после того, как пытался сделать это на некоторое время

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, CHARACTERS.charName 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID 
ORDER BY Stacks DESC 
GO 

Я получаю суммарную ошибку и я не знаю, как исправить этот запрос

Column 'CHARACTERS.charName' is invalid in the select list because it is not   
contained in either an aggregate function or the GROUP BY clause. 

Любая помощь приветствуется Спасибо :). Если мой формат моего вопроса не соответствует параметру, пожалуйста, оставьте комментарий о том, как я могу улучшить.

ответ

2

Просто добавьте charName к статье GROUP BY или обернуть его с функцией агрегации:

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, MAX(CHARACTERS.charName) 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID 
ORDER BY Stacks DESC 
GO 

Насколько мне известно, только MySQL принимает GROUP BY к не содержат весь набор столбцов. Каждый столбец должен быть либо в предложении GROUP BY, либо обернут функцией агрегации, как COUNT/MAX/MIN..

+0

Теперь выполняется запрос. Большое спасибо, но вместо того, чтобы показывать itemID 1, укладывается 2 раза этими двумя символами charNames, он вместо этого разбивает его на 2 разных Строит любые предложения? @sagi – Tristan

+0

@Tristan попробуйте сейчас – sagi

0

Попробуйте добавить 'CHARACTERS.charName' в пункт group by.

окончательный запрос должен быть как:

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, CHARACTERS.charName 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID, CHARACTERS.charName 
ORDER BY Stacks DESC 
GO 
Смежные вопросы