2013-04-17 144 views
0

我有這樣的查詢,顯示我很好其product.model被複制:的MySQL - 顯示在不同的表中的列,當只有一列是重複的重複數據

SELECT product.model, product_description.name, COUNT(*) AS Count 
FROM product, product_description 
WHERE product.product_id = product_description.product_id 
GROUP BY product.model ORDER BY COUNT 
HAVING Count >1 

但我不能強迫此查詢顯示每個重複product.model的product_description.name的內容,以比較product_description.name

我試圖對此結果進行IN,但我得到的是#1241 - 操作數應該包含1列(s) 」。任何想法我怎麼能進一步處理這個結果?

回答

0

您將需要一個子查詢做到這一點:

select 
    p.model, pd.name 
from 
    product as p, product_description as pd 
where 
    p.product_id = pd.product_id 
    and p.model in (
     select p.model 
     from product as p, product_description as pd 
     where p.product_id = pd.product_id 
     group by p.model having count(p.name)>1) 

希望這有助於

+0

我收到「#1054 - 'group statement'中的未知列'product.model'」試圖使用它。我確定我有這樣的專欄。 –

+0

@JakubBujak對不起,只是一個錯字...應該使用別名,而不是整個表名 – Barranka

+0

我試着用你的語句,但似乎這個查詢它太重了我的數據庫 - 我得到'2013丟失連接錯誤'。我試圖將它簡化到最小:*** 從 產品,其中p選擇 p.product_id 爲p 其中 p.model在 \t(從產品選擇p.model 爲p,作爲PRODUCT_DESCRIPTION PD 。 product_id = pd.product_id group by p.model having count(p.model)> 1)***但它仍然給我這個錯誤。任何想法我怎樣才能使它不那麼沉重?我在產品表中有20k條目 –

0

根據您想要的結果,如果你想看到哪些車型有一個以上的記錄在產品表,然後想要查看相關的產品說明,則可以使用GROUP_CONCAT來合併您的說明。

SELECT p.model, group_concat(pd.name), COUNT(1) AS Count 
FROM product p 
    INNER JOIN product_description pd USING (product_Id) 
GROUP BY p.model 
HAVING COUNT(1) > 1 
ORDER BY 3 

SQL Fiddle Demo

還有其他的方法可以做到這在不同的行返回,只是取決於你的需求。

+0

謝謝。這給了我一個單元格中的重複名稱。你能告訴我如何在單獨的行中列出重複模型的每一個描述,旁邊的單元格中有相應的模型?我正在尋找一種呈現這些數據的最佳方式。 –

+0

@JakubBujak - np,這是你要找的東西:http://sqlfiddle.com/#!2/0d92a/5 - 如果你想讓它們在不同的行中,Barranka有一個很好的方法。最好的祝福。 – sgeddes