問題タブ [unique]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - MySQL: N 行を選択しますが、1 つの列に一意の値しかありません
このデータセットを考えると:
私は 3 人の最年長者を見つける必要がありますが、すべての都市で 1 人だけです。
最年長の3人だけなら…
- ヘンリー・ジョーンズ / シカゴ
- マック・テイラー / ニューヨーク
- エゴン・スペングラー / ニューヨーク
しかし、Egon Spengler と Mac Taylor はどちらもニューヨークにいるため、Egon Spengler はドロップアウトし、代わりに次のメンバー (Sarah Connor / Los Angeles) が入ってきます。
エレガントなソリューションはありますか?
アップデート:
現在、PConroy のバリエーションが最適/最速のソリューションです。
「IN」を使用した彼の元のクエリは、大きなデータセットでは非常に遅くなります (5 分後に中止されます) が、サブクエリを JOIN に移動すると、大幅に高速化されます。約0.15秒かかりました。テスト環境で 100 万行。「都市、誕生年」のインデックスと、「誕生年」だけのインデックスがあります。
注:これは関連しています...
sql - NULL 列に一意のインデックスを作成する方法は?
SQL Server 2005 を使用しています。NULL を許可しながら、列の値を一意に制限したいと考えています。
私の現在のソリューションには、次のようなビューの一意のインデックスが含まれます。
より良いアイデアはありますか?
sql-server - SQL Server で UNIQUE インデックスを "インデックス" または "制約" として作成することの違いは何ですか?
UNIQUE になる列 (ただし、テーブルの主キーではない) にインデックスを作成する場合、SQL サーバーではいくつかのオプションを選択できます。
1) 制約またはインデックスを選択できます。
これは、制約として設定すると、クエリ時に使用されず、書き込み時にのみ使用されることを意味すると推測しています。ただし、SQL Server がその制約を強制するための唯一の効率的な方法は、実際にインデックスを作成することです。このオプションの用途は何ですか?
2) また、「インデックス」として設定すると、重複キーを無視するように指定できます。これは私にとって最も不可解です...これは、
制約の反対を意味していると思います。おそらく、「クエリ時には使用するが、書き込み時にはチェックしないでください」という意味です。
しかし、なぜ UNIQUE として設定するのでしょうか?
SQL Server が実行できる最適化がいくつかあると思いますが、それをよりよく理解したいと思います。
SQL Serverがこれらのオプションで何をするのか正確に知っている人はいますか?
インデックスを一意に設定し、重複キーを無視するユースケースは何ですか?
注: これは SQL Server 2000 用です。
編集:しかし、あなたが言ったことによると...制約を作成すると、制約のフィールドを使用してフィルタリングするクエリを高速化するために使用されますか?
ありがとう!
mysql - 2 つのフィールドに「両面」一意のインデックスを作成する方法は?
次のようなテーブルの 2 つのフィールドに一意のインデックスを効率的に作成するにはどうすればよいですか? create table t (a integer, b integer);
ここで、2 つの異なる数値の一意の組み合わせは、表の同じ行に複数回出現することはできません。
つまり、a=1 かつ b=2 であるような行が存在する場合、a=2 で b=1、または a=1 で b=2 である別の行は存在できません。言い換えれば、2 つの数字はどのような順序でも 2 回以上一緒に現れることはありません。
そのような制約が何と呼ばれているのかわからないため、タイトルに「両面一意インデックス」という名前が付けられています。
更新:列 (a、b) に複合キーがあり、行 (1,2) がデータベースに存在する場合、別の行 (2,1) をエラーなしで挿入できます。私が探しているのは、同じ数字のペアが任意の順序で複数回使用されるのを防ぐ方法です...
sql - SQLを使用して一意のレコードを数え、テーブル内のこれらの一意の数を取得する方法は?
次のようなテーブルがあるとします。
id:商品:shop_id
1:バスケットボール:41
2:サッカー:41
3:ロケット:45
4:車:86
5:プレーン:86
さて、これは大規模なインターネット モールの例です。1 人の顧客に販売する店舗があるため、顧客は各店舗からより多くの商品を選択して 1 つのバスケットで購入できます。
ただし、一意の shop_id と顧客バスケット内のショップの商品の総数を簡単に取得できる SQL 構文があるかどうかはわかりません。だから私は次のようなものを得るでしょう:
ショップ 41 には 2 つの商品があります
45 個の商品を購入する
ショップ 86 2 つの製品
すべての製品の shop_id を格納するある種の ['shop_id']['number_of_products'] 配列変数を作成する SQL クエリを作成して、テーブルをすくい取り、「それらを一意にする」ことができます。 shop_id をもう 1 つ追加して残りを確保していますが、これは無駄なスクリプトのように思えます。
素敵で素敵なアイデアがあれば、教えてください。
c# - std::sort および std::unique に相当する C#
C# に整数のリストがあります。重複を削除したい。C++ では、一意のリストを取得する非常に効率的な方法として、std::sort アルゴリズム、次に std::unique アルゴリズムを実行します。
C#で同じことを行う最良の方法は何ですか? 言い換えれば、次のコードを実行するためのよりエレガントな方法を探しています。
sql-server - SQL Server - レコードを挿入して一意にする方法
レコードを単一のテーブルに挿入する最良の方法を見つけようとしていますが、アイテムがまだ存在しない場合に限ります。この場合の KEY は NVARCHAR(400) フィールドです。この例では、オックスフォード英語辞書の単語の名前であると仮定して、お気に入りの辞書をここに挿入します。また、Word フィールドを主キーにする必要があると思います。(テーブルには一意の識別子 PK も含まれます)。
だから..テーブルに追加する必要があるこれらの単語を取得するかもしれません...
例えば。
- ネコ
- 犬
- フー
- バー
- ピューピュー
- 等...
伝統的に、私は次のことを試します(疑似コード)
すなわち。単語が存在しない場合は、挿入します。
今..私が心配している問題は、私たちがたくさんのヒットを取得していることです..そのため、SELECTとINSERTの間に別のプロセスから単語が挿入される可能性があります..その後、制約エラーがスローされます? (つまり、競合状態)。
次に、次のことができるかもしれないと考えました...
基本的に、単語が存在しない場合は単語を挿入します。
悪い構文はさておき、これがテーブルをロックダウンする方法(ロックダウンする場合)と、大量の読み取りと大量の書き込みを行うテーブルでのパフォーマンスが低いため、これが悪いか良いかはわかりません。
では、Sqlの専門家は何を考えていますか/何をしますか?
スローされたエラーに対して、単純な挿入と「キャッチ」を行うことを望んでいました。
c# - LinqToXml を使用したフィルターで (属性ごとに) 一意の XElement を選択する
次のような XML ドキュメントがあります。
ここで、linq クエリを使用して、指定されたカテゴリに属するすべての一意の所有者 (実際には所有者の属性値のみが必要です) を取得したいと考えています。私の例では、cat 1 のクエリは 9 と 14 を含むリストを返します。Linq 構文はラムダよりも優先されます。前もって感謝します ;)
msbuild - MSBuild で項目のリストを正規化する
プロジェクトのルートにあるすべての単体テスト アセンブリのリストを取得しようとしています。私は次のようにこれを行うことができます:
ただし、複数のサブディレクトリに存在するため、同じ DLL が複数回検出されます。アイテムのメタデータ (つまり、ファイル名と拡張子) に基づいて正規化し、一意の単体テスト DLL のリストを取得する簡単な方法はありますか? それとも、自分のタスクを書くことに頼る必要がありますか?
database - コード内の DB 制約をチェックする必要がありますか、それとも DB によってスローされた例外をキャッチする必要がありますか
Jobs というテーブルにデータを保存するアプリケーションがあります。Jobs テーブルには、UNIQUE 制約を持つ Name という列があります。Name 列は PRIMARY KEY ではありません。新しいエントリを保存/更新する前に自分でエントリの重複をチェックする必要があるのか 、それともデータアクセスレイヤーによってスローされる例外を待つ方がよいのか疑問に思います. 重要な場合は、このアプリにNHibernateを使用しています
すばらしいインプットをしてくれたみんなに感謝します。
例外がスローされる (そしてコードによってキャッチされる) のを待つのではなく、コードで検証する必要があるもう 1 つの理由を見つけました。この場合、NHibernate は NHibernate.Exceptions.GenericADOException のみをスローするようです。これは、この場合の例外の原因に関してあまり有益ではありません。それとも、ここでNHibernateの側面が欠けていますか?