姓と名をユーザー ID とともに格納するデータベースがあります。テーブルは次のようになります。
uid value
1 Fred
1 Keller
2 Tim
2 LaChef
3 Adam
3 Adam
重複uid
は問題ありませんが、姓と名が同じエントリをすべて検索したいですか? 3 のようにuid
。SQL のアイデアはありますか?
これを試して:
SELECT uid FROM tablename
GROUP BY uid, name HAVING COUNT(*) = 2;
各「重複」のコピーを 1 つだけ返すには、次のようにします。
SELECT t.uid
, t.value
FROM mytable t
GROUP
BY t.uid
, t.value
HAVING COUNT(1) > 1
ORDER
BY t.uid
, t.value
1 つのコピーではなく、重複している "すべて" のエントリを返すには、NULL 値を返す必要がない場合は、次のようにします。
SELECT a.uid
, a.value
FROM mytable a
JOIN ( SELECT t.uid
, t.value
FROM mytable t
GROUP
BY t.uid
, t.value
HAVING COUNT(1) > 1
) d
ON d.uid = a.uid
AND d.value = a.value
ORDER
BY a.uid
, a.value
NULL を返したい場合 (NULL が重複している場合)、ON 句の比較演算子を null セーフ等価比較に変更します。 <=>
ON d.uid <=> a.uid
AND d.value <=> a.value