我有兩個表即類別和產品。
表:類別
id category
1 cat1
2 cat2
3 cat3
4 cat4
表:產品
id productName category
1 test1 1
2 test2 2
3 test3 3
4 test4 4
5 test5 2
6 test6 2
我的概率是:
我需要的是插入最後在每一個類別的產品。
如何解決這個問題。
在此先感謝
我有兩個表即類別和產品。
表:類別
id category
1 cat1
2 cat2
3 cat3
4 cat4
表:產品
id productName category
1 test1 1
2 test2 2
3 test3 3
4 test4 4
5 test5 2
6 test6 2
我的概率是:
我需要的是插入最後在每一個類別的產品。
如何解決這個問題。
在此先感謝
您可以添加一個create_time
時間戳,當一個新的已添加產品,並按類別檢索最新版本:
select max(create_time),category from product group by category
這是問這裏最常見的SQL的問題之一,每組最大的變化。見例如。 this question適用於各種方法。
一個我經常使用的是空自左加入,選擇具有它上面沒有值的行:
SELECT p0.*
FROM product AS p0
LEFT JOIN product AS p1 ON p1.category=p0.category AND p1.id>p0.id
WHERE p1.id IS NULL
這是假設id
s的爲了分配使最高的是最近的。通常,依靠身份作爲排序機制並不是一個好主意;您通常會將added
時間戳添加到每行來處理。
(請注意,如果兩行具有相同的順序列,那麼許多其他每個組的最大函數可能會返回多個行;如果這是個問題,則可以通過使用UNIQUE
排序列來避免;作爲主鍵id
你可以得到一行,即使有兩個最大值使用SQL:2003的有用但相當醜陋的ROW_NUMBER() OVER
窗口函數,但這不被MySQL支持)。
無法爲「GROUP BY類別」選擇'productName',因爲產品名稱對類別沒有功能依賴性。您將從類別中獲得任意產品名稱,但不一定與create_time與MAX(create_time)匹配的產品相同。在其他數據庫軟件和ANSI SQL:92中,這只是一個錯誤。 – bobince 2010-04-17 10:56:47
感謝堆垛機,得到它 – Fero 2010-04-17 12:03:26
@bobince謝謝我修復它 – stacker 2010-04-17 17:10:15