mySQL选择旧表和新表查询

时间:2011-01-23 01:33:42

标签: mysql

嘿所有我想弄清楚为什么我的查询代码似乎不起作用:

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

大卫

2 个答案:

答案 0 :(得分:1)

首先,您没有指定任何JOIN条件来链接两个表中的记录。因此,您将获得一个笛卡尔JOIN(一个非常大的结果集,由productr中的每一行组成,连接到productr2010中的每一行,几乎肯定不是您想要的)。

其次,您通常希望在GROUP BY子句中包含所有非聚合列(在本例中为id,itemname和itemRUdate)。 MySQL,仅在主要数据库TTBOMK中,允许您不这样做,但如果这些列不包含所有相同的数据,您将从非GROUP BY列获得未指定的值。

最后,因为您要加入具有相同列名的表,所以必须前缀前缀每个对列的引用以及要获取它的表的名称来自,否则引擎将决定数据的来源。

答案 1 :(得分:1)

您需要从两个连接表中选择数据,如下所示。

SELECT productr.itemName, productr2010.itemName,

这将为每条数据生成两个单独的列,而不是包含两个表数据的单个列。