簡體   English   中英

僅選擇非唯一的行[MySQL]

[英]Select only the rows that aren't unique [MySQL]

我正在嘗試進行查詢以檢查重復項,如果我發現重復項,我希望能夠相應地進行更新。 例如,我有以下數據集,如何僅選擇“位置”值相同的2行?

 ID position 1 0 2 1 3 2 4 1 5 3 

在此示例中,我將僅選擇第2行和第4行。

SELECT t.position, 
    count(t.*) AS count 
FROM table t
GROUP BY position 
HAVING count(position) > 1

應該返回一個位置列表及其重復計數。

編輯:忽略別名我的表

如果要查看具有重復位置的行,請嘗試:

SELECT t1.ID,
    t1.position,
    t2.ID,
    t2.position
FROM table t1
INNER JOIN table t2
    ON t1.ID < t2.ID
    AND t1.position = t2.position

這將為您提供一組行(4列),其中有重復項。 復制將獲得1行,一式三份獲得3行,四元組獲得6行,並且從該點開始增加。

為了進一步擴展Matt S的答案(正確的答案),您可以使用他的結果並加入原始表以獲取確切的行:

select
    id
    ,position
from table t
    join (
        select t1.position
        from table t1
        group by t1.position
        having count(*) > 1
    ) list
    on t.position = list.position

在WHERE子句中使用CTE或EXISTS()函數將使其更易於閱讀,但我不知道MySQL在語法上支持什么(我是T-SQL的家伙:))。 這應該是ANSI。

Matt S的答案是通常可以得到想要的東西的方式。 為了稍微擴展scottE的答案(並且由於我們在談論MySQL),如果輸出令人滿意,您也可以使用group_concat()來收集所需的信息。

SELECT group_concat(ID) as 'IDs', position
FROM table
GROUP BY position
HAVING count(position) > 1

應該返回您:

ID | 位置
2,4 | 1個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM