5

一意ではない名を持つすべての人を選択する必要があるテーブルがあります。そのセットは、同じような名を持つ人の中で、すべての人の名前が異なる場合にのみ選択する必要があります。

例:

FirstN    LastN
Bill      Clinton
Bill      Cosby
Bill      Maher
Elvis     Presley
Elvis     Presley
Largo     Winch

入手したい

FirstN    LastN
Bill      Clinton

また

FirstN    LastN
Bill      Clinton
Bill      Cosby
Bill      Maher

これを試しましたが、欲しいものが返ってきません。

SELECT * FROM Ids
GROUP BY FirstN, LastN
HAVING (COUNT(FirstN)>1 AND COUNT(LastN)=1))

[AleandreP.Lavasseurの発言の後に私の投稿を編集しました]

4

4 に答える 4

7
WITH duplicates AS (
  SELECT firstn --, COUNT(*), COUNT(DISTINCT lastn)
    FROM ids
    GROUP BY firstn
    HAVING COUNT(*) = COUNT(DISTINCT lastn)
       AND COUNT(*) > 1
)
SELECT a.firstn, a.lastn
  FROM ids a INNER JOIN duplicates b ON (a.firstn = b.firstn)
  ORDER BY a.firstn, a.lastn

mysqlがWITHをサポートしていない場合、内部クエリは次のようになります。

SELECT a.firstn, a.lastn
  FROM ids a
      ,(SELECT firstn --, COUNT(*), COUNT(DISTINCT lastn)
          FROM ids
          GROUP BY firstn
          HAVING COUNT(*) = COUNT(DISTINCT lastn)
             AND COUNT(*) > 1
        ) b
  WHERE a.firstn = b.firstn
  ORDER BY a.firstn, a.lastn
于 2012-06-21T01:15:43.333 に答える
3

あなたはこれを試すことができますか:

SELECT A.FirstN, B.LastN
FROM (
SELECT FirstN
FROM Ids
GROUP BY FirstN
HAVING (COUNT(FirstN)>1)
) AS A
INNER JOIN Ids B ON (A.FirstN = B.FirstN)
GROUP BY A.FirstN, B.LastN
HAVING COUNT(B.LastN)=1
于 2012-06-21T01:25:05.330 に答える
0

あなたはおそらくこれを行うことができます...

SELECT FirstN + LastN as FullName, COUNT(*)
FROM Ids
GROUP BY FirstN + LastN
HAVING COUNT(*) > 1

連結が無効になるため、必ずnullを確認してください。

于 2012-06-21T01:48:11.223 に答える
0

回答2と似ていますが、名前が繰り返される最初のレジスタを取得します(取得したいと言った最初の結果)

select T.FirstN, T.LastN from  (
      select FirstN, LastN  from Ids
    group by FirstN, LastN
      having count(1) = 1) T
group by FirstN
having count(1) > 1;
于 2012-06-21T03:12:40.587 に答える