1

最近、テーブル スキーマを更新して、行に応じて 1 つまたは複数の可能な値を持つ新しい列を含めました (これらの可能な値を別のテーブルから取得できます)。テーブルを更新し、現在の各行を 1 つまたは複数の新しい行に置き換えたいと考えています。この場合、古い列の値はすべて元の行と一致し、新しい列の値は可能な各値を 1 回カバーします。

Animal例として、列AnimalTypeSizeHabitat、およびを含む というテーブルがあるとしますWeight。という名前の新しい列を追加しますColor- 一部の動物は 1 つの色しか持たず、一部の動物は複数の可能な色のうちの 1 つを持つことができます。Bird次のような行があるとします。

{ AnimalType = Bird, Size = Small, Habitat = Woods, Weight = under 10 pounds, Color = NULL }

ここで、別の表 ( と呼びますAnimalColors)によると、Birds赤、青、茶色の 3 色があるとします。

その単一の行を、次のような 3 つの新しい行に置き換えたいと考えています。

{AnimalType = Bird, Size = Small, Habitat = Woods, Weight = under 10 pounds, Color = Red}
{AnimalType = Bird, Size = Small, Habitat = Woods, Weight = under 10 pounds, Color = Blue}
{AnimalType = Bird, Size = Small, Habitat = Woods, Weight = under 10 pounds, Color = Brown}

テーブルに複数の行があり、Animalsそれぞれに対してこの操作を実行したいと考えています。

これを行う簡単な方法はありますか?

ありがとう!

4

2 に答える 2

4

既存の行をそのままにしておくことで、この問題を解決することを検討します。

既存の行に基づいて色が移入された新しい行を作成します

NULL 行を削除します (期待どおりであることを確認した後)。

-- Add rows with color populated
WITH AnimalColors (AnimalType, Color) AS
(
    SELECT 'bird', 'red'
    UNION ALL SELECT 'bird', 'blue'
    UNION ALL SELECT 'bird', 'brown'
    UNION ALL SELECT 'lizard', 'green'
)
, ExistingRows(AnimalType, Size, Habitat, Weight, Color) AS
(
    SELECT 'bird', 'small', 'woods', 'under 10 pounds', NULL
    UNION ALL SELECT 'lizard', 'small', 'rocks', 'under 10 pounds', NULL
)
INSERT INTO
    Animal
(
    AnimalType
,   Size
,   Habitat
,   Weight
,   Color
)
SELECT
    ER.AnimalType
,   ER.Size
,   ER.Habitat
,   ER.Weight
,   AC.Color
FROM
    AnimalColors AC
    INNER JOIN
        ExistingRows ER
        ON ER.AnimalType = AC.AnimalType;

-- Manually review values of Animal table
SELECT A.* FROM Animal A ORDER BY A.AnimalType, A.Color;

-- Remove the uncolored rows
DELETE A FROM Animal A WHERE A.Color IS NULL;
于 2012-10-29T15:56:30.410 に答える
1

D:

複数の値を持つ可能性のある属性については、別のテーブルを追加する必要があります。そうしないと、将来、更新や削除に関して問題が発生する可能性があります (正規化を参照)。

たとえば、AnimalID を使用して Animal テーブルにリンクする「AnimalColor」テーブルを追加します。データベースは次のようになります。

Animals
AnimalID  AnimalName

AnimalColors
AnimalID  Color
于 2012-10-29T15:55:03.387 に答える