3

姓と名をユーザー ID とともに格納するデータベースがあります。テーブルは次のようになります。

uid value
1   Fred
1   Keller
2   Tim
2   LaChef
3   Adam
3   Adam

重複uidは問題ありませんが、姓と名が同じエントリをすべて検索したいですか? 3 のようにuid。SQL のアイデアはありますか?

4

2 に答える 2

11

これを試して:

SELECT uid FROM tablename 
GROUP BY uid, name HAVING COUNT(*) = 2;
于 2012-12-20T19:04:16.907 に答える
4

各「重複」のコピーを 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
于 2012-12-20T19:33:17.047 に答える