2016-05-16 62 views
0

我有兩個一對多關係表。我想檢查映射表中是否有任何重複條目。MySQL檢查一對多關係中的重複條目

客戶:

+----------------------------+--------------+------+-----+---------+----------------+ 
| Field      | Type   | Null | Key | Default | Extra   | 
+----------------------------+--------------+------+-----+---------+----------------+ 
| uid      | int(11)  | NO | PRI |   | auto_increment | 
| active      | tinyint(1) | NO |  |   |    | 
| locked      | tinyint(1) | NO |  |   |    | 
+----------------------------+--------------+------+-----+---------+----------------+ 

items_mapping:

+--------------+---------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+---------------+------+-----+---------+----------------+ 
| uid   | int(11)  | NO | PRI |   | auto_increment | 
| customer_uid | int(11)  | NO |  |   |    | 
| device_uid | int(11)  | NO |  |   |    | 
| offered  | float(11,2) | NO |  |   |    | 
+--------------+---------------+------+-----+---------+----------------+ 

如何檢查是否有任何客戶,在表的表items_mapping,誰擁有複製device_uid?

總之,這將工作:

+-------+--------------+------------+---------+ 
| uid | customer_uid | device_uid | offered | 
+-------+--------------+------------+---------+ 
| 1132 | 53442  |  24 | 2.00 | 
| 8242 | 53442  |  45 | 4.00 | 
| 15122 | 53442  |  12 | 5.00 | 
+-------+--------------+------------+---------+ 

但它不應該是:

+-------+--------------+------------+---------+ 
| uid | customer_uid | device_uid | offered | 
+-------+--------------+------------+---------+ 
| 1132 | 53442  |  24 | 2.00 | 
| 8242 | 53442  |  45 | 4.00 | 
| 15122 | 53442  |  24 | 2.00 | 
+-------+--------------+------------+---------+ 
+0

是有可能的兩個不同的客戶(customer_uid)擁有同一個設備(device_uid)? – mitkosoft

+0

是的,許多客戶可以從同一個設備獲得相同的報價,但是他們不能爲一個客戶提供相同的報價。 – ln9187

回答

1

只需按customer_uiddevice_uid連同having條款:

SELECT 
    customer_uid, 
    device_uid, 
    COUNT(device_uid) count_device_uid 
FROM 
    items_mapping 
GROUP BY 
    customer_uid, 
    device_uid 
HAVING 
    COUNT(device_uid) > 1 

這將爲您提供重複的所有客戶如果它運行,但應該給你的結果

+0

omg,真的嗎? ** facepalm我自己。男人,我不能太快接受答案。你得等一等。 – ln9187

1

不知道:

SELECT 
    COUNT(*), 
    customer_id, 
    device_uid, 
FROM 
    items_mapping 
GROUP BY 
    device_uid, customer_id 
HAVING COUNT(*) > 1 
+0

作爲mitkosoft,你有一個正確的答案,但我喜歡它,當他首先將customer_uid放在GROUP BY語句中時。 – ln9187