2016-11-29 50 views
0

我可以得到一個條目,它除了定義之外,在所有字段中都相等嗎?SQL Where子句:所有字段相同,除了一個

EG:

SELECT a.* 
FROM table_name a 
INNER JOIN table_name b 
    on (a.price = b.price 
    AND a.quantity = b.quantity 
    AND {all the remaining params}) 
    AND a.id <> b.id 

我需要找到相同的條目中,除其ID(重複的條目)

+0

_all餘下的參數_你必須設置所有剩餘的參數。您可以使用自動化功能,例如構建所有參數的函數。 –

+0

使用'minus'或'intersect'運算符可能會出現這種情況,但MySQL不支持這些函數。所以我不得不說:「不,你不能」 – xQbert

+0

爲什麼你的最後一個條件不包含在ON子句中? – BeS

回答

0

您可以使用SELECTGROUP BY子句。 例如,如果您有一個名爲names的表,並且列name(您想檢查重複項)。你可以這樣做:

select name, count(*) c from names group by name having c > 1; 

這也將返回一個附加列表示在發生行中的重複值的次數。

希望它有幫助。

+0

這是我能想到的唯一方法來查找重複項,但他必須在select和group by中單獨列出所有X字段。 (注意:你可以使用系統表來生成整個列的列表,所以你不必手動輸入它們!) – xQbert

-1

更改 「和A.ID <> b.id」 到「WHERE a.id <> b.id「,這應該適合你。

+1

重新閱讀這個問題。如果一張桌子有30列,他想比較其中的29列,並確保30日不匹配;但不列出所有列... – xQbert

+0

xQbert - 將最後一個AND更改爲WHERE將從ID不同的連接表中選擇記錄,這就是他正在尋找的。 – SeanBartram

+0

我們如何知道所有其他領域是否相等,如果他們沒有被定義? Bub在評論中說「你必須列出它們」,而Sly_huh表示它「不夠方便」,***使用INNER連接時,使其成爲where子句對結果沒有影響。** – xQbert