6

SQL サーバー 2005。

外部キー制約を必要としないアプリケーションのデータベースに追加しています。当然、データは信頼できなくなり、外部キー フィールドに孤立したエントリが存在します。

セットアップ:
2 つのテーブル、TableUser と TableOrder。TableUser には主キー 'UserID' があり、TableOrder には外部キー 'UserID' があります。

TableOrder.UserID が TableUser.UserID に一致するエントリがない行を見つけるにはどうすればよいですか?

たとえば、TableOrder.UserID の値は 250 ですが、250 に一致する TableUser.UserID キーはありません。

4

3 に答える 3

10

1 つの方法を次に示します。

select * from TableOrder where UserID not in (select UserID from TableUser);

この種のクエリを作成するには、さまざまな方法があります。

于 2008-11-03T18:23:35.643 に答える
4

他の一般的なアプローチは、左外部結合です。

SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL

このクエリは、where句がなくても、対応する値(存在する場合)を参照して確認し、一致する値がないかどうかを確認するのに役立ちます。

于 2008-11-03T18:59:51.313 に答える
0

そもそも、テーブルには FK 制約がありませんでした。FK や PK のように使用されていましたが、コード化されていませんでした。不要なオーバーヘッドであると考えられていました。したがって、すべての列がありますが、コード化された制約はありません。それらを施行するためにそれらを入れに行ったとき、私は多くの違反があることを発見しました.

あなたの質問は問題を強調しています。それらは不必要なオーバーヘッドではなく、一般的なデータベースの混乱を防ぎます。

グレッグとブラッドの両方の答えが私を助けてくれました。

于 2008-11-04T14:13:25.727 に答える