2016-05-16 7 views
0

私は1対多の関係で2つのテーブルを持っています。マッピングテーブルに重複エントリがあるかどうかを確認したい。MySQLは1対多の関係で重複エントリをチェックします

のお客様:

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

items_mapping:任意の顧客が重複device_uidを持つテーブルテーブル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 |  |   |    | 
+--------------+---------------+------+-----+---------+----------------+ 

はどうやってチェックしますか?要するに

、これは動作します:

+-------+--------------+------------+---------+ 
| 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)1を持っているし、同じデバイス(device_uid)可能ですか? – mitkosoft

+0

はい、多くの顧客は同じデバイスから同じオファーを受けることができますが、1人の顧客で同じオファーを持つことはできません。 – 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

本当に? **私自身の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