嘿所有我想弄清楚为什么我的查询代码似乎不起作用:
SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM productr, productr2010
WHERE itemRUDate >= '2010/12/01' AND itemRUDate <= '2011/01/22'
GROUP BY itemName
ORDER BY SumOf DESC
表productr2010是 OLD 数据,而productr是今年(2011年)的全新表格。当我尝试运行查询时,我得到了这个:
Column 'id' in field list is ambiguous
我不确定我需要做什么才能从两个表中分级数据?我也试过这个:
SELECT productr.id, productr.itemName, productr.itemRUDate, Sum(productr.itemsSold) AS SumOf
FROM productr, productr2010
WHERE productr.itemRUDate >= '2010/12/01' AND productr.itemRUDate <= '2011/01/22'
AND productr2010.itemRUDate >= '2010/12/01' AND productr2010.itemRUDate <= '2011/01/22'
GROUP BY itemName
ORDER BY SumOf DESC
我只得到了productr表中的数据,而不是那个和productr2010表。
我确信我只是在忽略一些简单的事情......
更新
得到它:
SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM productr
WHERE itemRUDate >= '2010/12/01' AND itemRUDate <= '2011/01/22'
GROUP BY itemName
UNION
SELECT id, itemName, itemRUDate, Sum(itemsSold) AS SumOf
FROM productr2010
WHERE itemRUDate >= '2010/12/01' AND itemRUDate <= '2011/01/22'
GROUP BY itemName
ORDER BY SumOf DESC
大卫
答案 0 :(得分:1)
首先,您没有指定任何JOIN条件来链接两个表中的记录。因此,您将获得一个笛卡尔JOIN(一个非常大的结果集,由productr中的每一行组成,连接到productr2010中的每一行,几乎肯定不是您想要的)。
其次,您通常希望在GROUP BY子句中包含所有非聚合列(在本例中为id,itemname和itemRUdate)。 MySQL,仅在主要数据库TTBOMK中,允许您不这样做,但如果这些列不包含所有相同的数据,您将从非GROUP BY列获得未指定的值。
最后,因为您要加入具有相同列名的表,所以必须前缀前缀每个对列的引用以及要获取它的表的名称来自,否则引擎将决定数据的来源。
答案 1 :(得分:1)
您需要从两个连接表中选择数据,如下所示。
SELECT productr.itemName, productr2010.itemName,
这将为每条数据生成两个单独的列,而不是包含两个表数据的单个列。