Столбец mySQL 'id' в списке полей неоднозначен - PullRequest
0 голосов
/ 29 марта 2012

Код ниже дает мне ошибку:

столбец 'id' в списке полей неоднозначен.

Я добавил productr2011 к нему, и он начал это делать. Если я возьму product2011 из запроса, то он будет работать нормально.

SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM productr
WHERE itemRUDate >= '2012/03/03' AND itemRUDate <= '2012/03/03'
GROUP BY itemName

UNION

SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM productr2010, productr2011
WHERE itemRUDate >= '2012/03/03' AND itemRUDate <= '2012/03/03'
GROUP BY itemName
ORDER BY SumOf DESC;

Почему он работает только с product2010, а не с product2010, product2011?

Обновление

Я просто пытаюсь объединить старые архивные записи с поиском. Подсказки, почему я добавляю все данные за 2010 и 2011 годы (обычно даты запроса должны быть 2011, а не 2012): o)

Ответы [ 3 ]

5 голосов
/ 29 марта 2012

Если оба поля productr2010 и productr2011 имеют поле id, вам придется формально указать, какое из них выбрать:

SELECT productr2010.id

Даже если вы сделаете это, я сомневаюсь, что вы на правильном пути с вашим запросом. Почему вы хотите объединить две таблицы? Поскольку это выглядит как историзация таблиц, я предполагаю, что вам следует добавить еще одно предложение UNION, чтобы "объединить" productr2010 и productr2011, а не объединять их. Другими словами, сделайте что-то вроде этого:

SELECT ...
FROM productr
...
UNION
SELECT ...
FROM productr2010
...
UNION
SELECT ...
FROM productr2011
...

Даже тогда я думаю, что запрос, который вы действительно хотите , заключается в следующем (предотвращение дублирования записей на itemName среди трех таблиц):

SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM (
  SELECT id, itemName, itemRUDate, itemsSold FROM productr     UNION ALL
  SELECT id, itemName, itemRUDate, itemsSold FROM productr2011 UNION ALL
  SELECT id, itemName, itemRUDate, itemsSold FROM productr2010  
) AS subquery
WHERE itemRUDate >= '2012/03/03' AND itemRUDate <= '2012/03/03'
GROUP BY itemName
ORDER BY Sum(itemsSold) DESC;

Я все еще немного сбит с толку, почему вы хотите выбрать произвольные значения id и itemRUDate из ваших сгруппированных подзапросов, но это был бы другой вопрос ...

1 голос
/ 29 марта 2012

Вы уверены, что хотите сделать соединение между product2010 и product2011?Я не уверен в ваших точных требованиях, но это, возможно, то, что вы ищете:

1 голос
/ 29 марта 2012

Вам необходимо указать, из какой таблицы идет столбец id.

Либо:

   SELECT productr2010.id, itemName, itemRUDate, Sum(itemsSold) AS SumOf

ИЛИ

   SELECT productr2011.id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...