字段列表中的mySQL列'id'不明确

时间:2012-03-29 15:25:42

标签: mysql sql

以下代码给出了错误:

  

字段列表中的列'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 个答案:

答案 0 :(得分:5)

如果productr2010productr2011都有id字段,那么您必须正式确定要选择的字段:

SELECT productr2010.id

即使你这样做,我怀疑你的查询是否在正确的轨道上。你为什么要加入这两个表?由于这看起来像表历史,我猜你应该添加另一个UNION子句,以“统一”productr2010productr2011,而不是加入它们。换句话说,做这样的事情:

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;

我仍然有点困惑为什么你想要从你的分组子查询中选择任意iditemRUDate值,但那将是另一个问题......

答案 1 :(得分:1)

您需要指定id列来自哪个表。

或者:

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

OR

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

答案 2 :(得分:1)

您确定要在product2010product2011之间进行联接吗?我不确定你的确切要求,但这可能是你在寻找的东西:

    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
    WHERE itemRUDate >= '2012/03/03' AND itemRUDate <= '2012/03/03'
    GROUP BY itemName
UNION
    SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
    FROM productr2011
    WHERE itemRUDate >= '2012/03/03' AND itemRUDate <= '2012/03/03'
    GROUP BY itemName
ORDER BY SumOf DESC;