わかった。これは説明が難しいのですが、データベースの外部キーの型を置き換えています。これを行うには、それを参照するテーブルの値を更新する必要があります。それはすべて素晴らしいことであり、素晴らしいことであり、簡単に行うことができます。
元のテーブルを置き換える一時テーブルにこのようなものを挿入していますが、insert
クエリはまったく難しくありませんselect
。値を取得するのは.
ただし、元の参照が NULL であったエントリも保持したいと考えています。また、難しいことではありませんが、そのために Left Inner Join を使用できます。
しかし、これで終わりではありません。2 番目のテーブルに一致しないエントリは必要ありません。私はこれを 2 時間もの間いじり回してきましたが、月にいる以上にこれを理解することに近づいていません。
データセットの例を示します。
____________________________
| Inventory || Customer |
|============||============|
| ID Cust || ID Name |
|------------||------------|
| 1 A || 1 A |
| 2 B || 2 B |
| 3 E || 3 C |
| 4 NULL || 4 D |
|____________||____________|
データベースがフィールドを主キーとして使用していたとしましょう。これを標準IDCustomer.Name
に変更する必要があります。int identity(1,1) not null
Customer テーブルに問題なくフィールドを追加し、他のものに必要なため名前を保持しました。NULL を許可しないすべてのテーブルではこれで問題はありませんでしたが、「Inventory」テーブルでは何かを No customer に関連付けることができるため、問題が発生しています。
左内部結合を行った場合、結果は次のようになります。
______________
| Results |
|============|
| ID Cust |
|------------|
| 1 1 |
| 2 2 |
| 3 NULL |
| 4 NULL |
|____________|
ただし、インベントリ #3 は、存在しない顧客を参照していました。私はそれを除外したい。このデータベースは私の開発データベースであり、有効性を無視してハッキング、スラッシュ、破壊を行っています。そのため、これらの表の多くのリンクは無効になっています。次のステップは、このプロセスをベータ テスト環境で複製することです。この環境では、悪い記録が存在しないはずですが、それを保証することはできません。できればフィルターはつけておきたいですね。
私が今持っているクエリは、サブクエリを使用して、 またはに存在するすべての行Inventory
を検索しています。次に、サブクエリが見つけた行からのみ値を取得しようとします。翻訳されたクエリは次のとおりです。CustID
Customers
is null
insert into results
(
ID,
Cust
)
select
inv.ID, cust.ID
from Inventory inv, Customer cust
where inv.ID in
(
select inv.ID from Inventory inv, Customer cust
where inv.Cust is null
or cust.Name = inv.Cust
)
and cust.Name = inv.Cust
しかし、ご覧のとおり、このクエリは正しくありません。2 つ、3 つのサブクエリ、内部結合、左結合、bleh を使用してみました。このクエリの結果、および私が試した他の多くの結果 (恐ろしく、ひどく間違っていませんでした) は次のとおりです。
______________
| Results |
|============|
| ID Cust |
|------------|
| 1 1 |
| 2 2 |
|____________|
これは本質的に内部結合です。私の実際のデータには、そのフィールドに NULL 値を持つ約 1100 のレコードがあることを考えると、それらを切り捨てることは答えではないと思います。
私が探している答えは次のとおりです。
______________
| Results |
|============|
| ID Cust |
|------------|
| 1 1 |
| 2 2 |
| 4 NULL |
|____________|
この選択への挿入の最も難しい部分は、別のテーブルからの値、または本質的にこのテーブルからの値またはリテラル NULL のいずれかを挿入しようとしているという事実です。それは私がやり方を知っていることではありません。私はまだSQLのコツをつかんでいます。
このクエリの結果をテーブルに挿入しているので、NULL 値と一致しないレコードを除外する選択を使用して挿入を行い、次に戻ってすべての NULL レコードを追加することを検討しましたが、このようなより高度なクエリを実行する方法を本当に知りたいです。
それで、皆さんの中に何かアイデアはありますか?道に迷ったから。