[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
2022-03-22 23:59:54
質問
あるデータベース・アプリケーションのメンテナンスをしていて、嬉しいことに、あるテーブルの値が外部キーのスタイルで使用されているにもかかわらず、そのテーブルには外部キー制約がないことを発見したんだ。
これらのカラムにFK制約を追加しようとしているのですが、以前のエラーからすでにテーブル内に大量の不良データがあり、素朴に修正されているため、他のテーブルと一致しない行を見つけて削除する必要があることがわかりました。
この種のクエリの例をいくつかウェブで見つけたのですが、どれも説明というより例を示しているようで、なぜうまくいくのか理解できません。
他のテーブルにマッチしない行をすべて返すクエリの作成方法とその内容について、どなたか説明していただけませんか。 ごちゃごちゃ FK制約を持たないもの?
解決方法は?
簡単なクエリを紹介します。
SELECT t1.ID
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID = t2.ID
WHERE t2.ID IS NULL
重要なポイントは
-
LEFT JOIN
のすべての行を返します。Table1
に一致する行があるかどうかに関係なく、その行はTable2
. -
は
WHERE t2.ID IS NULL
この句は、返される結果を、ID がTable2
がヌルである場合、言い換えれば NO のレコードをTable2
から、その特定の ID に対してTable1
.Table2.ID
からのすべてのレコードに対してNULLを返します。Table1
でIDが一致しない場合、そのIDはTable2
.
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] MYSQLでMAX(列の値)、PARTITIONで別の列で行を選択するにはどうすればよいですか?
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] SQLサーバーで行を列に効率的に変換する
-
[解決済み] FOREIGN KEY制約を導入すると、サイクルや複数のカスケード・パスが発生する可能性があります - なぜですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] [Solved] Oracle SQL Developerで、指定したテーブルを参照しているテーブルを見つけるにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
plsql-stored-procedure ORA-06550 エラー処理
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] 文字列の一部をUPDATEおよびREPLACEする。
-
[解決済み] SQLサーバーで行を列に効率的に変換する