2012-03-29 60 views
-1

下面的代碼是給我的錯誤:MySQL的列「ID」是ambigous

column 'id' in field list is ambiguous.

我加入了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)

回答

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; 
+0

我已更新我的OP,解釋爲什麼我這樣做。 – StealthRT 2012-03-29 15:37:01

+0

感謝代碼,nikhil500。這工作得很好:o) – StealthRT 2012-03-29 15:41:04

5

如果同時productr2010productr2011id場,那麼你就必須要正式晉級哪一個選擇:

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值,但這將是另一個問題...

+0

我已經更新我的OP解釋爲什麼我做這種方式。 – StealthRT 2012-03-29 15:36:53

+0

雖然你的答案就像nikhil500 - nikhil500比你早幾分鐘:o)但是,謝謝你們! – StealthRT 2012-03-29 15:41:50

+0

@StealthRT:對於nikhil500好,即使我認爲你讀的時間戳有點不對;-)。不過,請檢查我的更新答案。我認爲你的查詢仍然不完全正確... – 2012-03-29 15:44:27

1

您需要指定id列來自哪個表。

或者:

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

OR

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

我已經更新了我的OP,以解釋爲什麼我這樣做。 – StealthRT 2012-03-29 15:37:20

+0

感謝這個例子,bluefeet。 – StealthRT 2012-03-29 15:41:17