0

誰かがここで既存の質問に私を向けることができれば、それは素晴らしいことです. このケースを見つけるのに苦労していることがわかりました。

それをいじるためにSQL Fiddleをチェックしてください。SO検索機能のために、スキーマとフィドルからの質問を次に示します。

私の users テーブルには、ユーザーが割り当てられている国に一意の制約があります (国ごとに 1 人のユーザーまで)。ただし、彼らは好きな場所に住むことができます。

質問を開始

割り当てられた国と住所がレコード間で 1 回だけ表示されるユーザーのみを返したいと考えています。この場合はレコード 4 で、列間の重複も望ましくなく、行間の重複もありません。どのように?!:)

CREATE TABLE users
    (`id` int, 
     `country` varchar(255), 
     `domicile` varchar(255), UNIQUE(country)
    )
;

INSERT INTO users
    (`id`, `country`, `domicile`)
VALUES
    # Duplicate across column and row
    (1, "usa", "usa"),
    (2, "canada", "usa"),

    # Duplicate only across columns or no duplication
    (3, "mexico", "mexico"),
    (4, "uganda", "australia"),    

    # Duplicate only across rows
    (5, "germany", "portugal"),
    (6, "france", "portugal"),
    (7, "spain", "portugal")
;

適切な設計によりこれが容易になることは、当面の間取っておきます。配られた手札で仕事をしようとしているだけです。;)

4

2 に答える 2

2

これが最も簡単な方法だと思います:

SELECT *
FROM users
GROUP BY domicile
HAVING COUNT(*) = 1

フィドル

オイゲンの答えとは異なり、これは列に一意の制約があるという事実に依存するcountryため、チェックするだけで済みますdomicile

于 2013-10-24T00:02:42.957 に答える
1

私の理解が正しければ、国と住所の両方で重複除外を行いたいと考えているため、次の 2 つの手順が必要です。

SELECT
  MIN(id),
  country,
  domicile,
  COUNT(*) AS domnum
FROM (
  SELECT
    MIN(id) AS id,
    country,
    domicile,
    COUNT(*) AS counum
  FROM users
  GROUP BY country
  HAVING counum=1
) AS base
GROUP BY domicile
HAVING domnum=1

編集

テスト データでは、居住地全体の重複排除で十分ですが、とにかく両方の手順を含めました。

編集

SQLフィドル

于 2013-10-23T23:52:39.183 に答える