2012-03-22 24 views
0

我有表以下結構和測試記錄:如何使用MySQL「LIKE」顯示重複行?

+--------+--------+---------+ 
| vid | number | name | 
+--------+--------+---------+ 
| 2  || name1 | r1 
| 6  | 0| 1name | r2 
| 5  || namee | r3 
| 6  | 9111522| name6 | r4 
| 3  | 999999 | name65 | r5 
| 2  | 0999999| name64 | r6 
+--------+--------+---------+ 

的行R1,R2和R3是重複的,因爲12345是內部的場數和R5和R6是重複的。 我想顯示此表中的重複行。

我必須創建什麼查詢才能獲得此結果?

在此先感謝!

回答

2

它看起來像你存儲你的「號碼」一欄爲一個字符串(VARCHAR)。如果是這種情況,我強烈建議您將其切換到INT列類型。如果這是不可能的,那麼我會確保你的應用程序正常化數據,所以字符串格式的數字總是以相同的格式。它會讓生活變得更容易。

反正在的存在,假設一個重複的表示數據的術語「數據的數字表示是相同的」,那麼這將工作

SELECT 
    t1.vid, t1.number, t1.name 
FROM table t1 
    INNER JOIN table t2 
    ON CAST(t1.number AS SIGNED)=CAST(t2.number AS SIGNED) AND t1.vid!=t2.vid 
GROUP BY t1.vid 
+0

這是比我的更完整,更好的答案。 – RumpRanger 2012-03-22 14:19:28

1

請嘗試下面的查詢,它不會將您限制爲特定模式。將Michaels中的正則表達式添加到WHERE子句中,以便按模式進行分組。

SELECT 
    t1.id, t1.number, t1.name 
FROM table t1 
LEFT OUTER JOIN table t2 
ON t1.number LIKE CONCAT('%', t2.number, '%') 
GROUP BY t1.id 
HAVING COUNT(*) > 1 

UPDATE 通過添加CAST簽署功能上面的查詢,我們可以得到所有領先的0條目中刪除。

SELECT 
    t1.id, t1.number, t1.name 
FROM table t1 
LEFT OUTER JOIN table t2 
ON t1.number LIKE CONCAT('%', CAST(t2.number AS SIGNED), '%') 
GROUP BY t1.id 
HAVING COUNT(*) > 1 

下面是MYSQL的小提琴鏈接展示樣本數據查詢:http://sqlfiddle.com/#!2/4deee/2