0

私は2つのテーブルを持っています。最初のテーブルの構造は部分的に要約され、2番目のテーブルの構造を繰り返します。

table1 (id, i, j, k, a, b, c, x, y, z) -- requests
table2 (id, a, b, c, d) -- essential elements / bank subjects

指定されたIDtable1のレコードに挿入する必要があります。table2それを行うための最良のアプローチは何ですか?

私には2つのアイデアがあります:

1:

DECLARE @a type, @b type, @c type
SELECT @a = a, @b = b, @c = c, FROM table2 WHERE id = @id
INSERT INTO table1 (i, j, k, a, b, c, x, y, z)
 VALUES (@i, @j, @k, @a, @b, @c, @x, @y, @z)

2:

CREATE TABLE #result (a type, b type, c type)
SELECT a, b, c INTO #result FROM table2 WHERE id = @id
INSERT INTO table1 (i, j, k, a, b, c, x, y, z)
  VALUES (@i, @j, @k,
    (SELECT a FROM #result),
    (SELECT b FROM #result),
    (SELECT c FROM #result),
    @x, @y, @z)

他にどのようなアプローチがありますか?どちらがベストプラクティスですか?

4

4 に答える 4

6

私はこのようにします:

INSERT INTO table1 (i, j, k, a, b, c, d, x, y ,z)
Select  @i, @j @k, a, b, c, d, @x, @y, @z
From    table2
Where   id = @id

これにより、データをローカル変数や一時テーブルに取り込む必要がなくなります。パフォーマンスが向上するはずです。

実現する重要な部分は、selectで値をハードコーディングできることです。列をリストする順序(行を挿入)は、選択行に列をリストする順序と一致する必要があります。

于 2009-07-06T22:07:29.063 に答える
2

あなたは単一の挿入クエリでそれを行うことができます:

insert into table1 (a, b, c, d, x, y, z)
select a, b, c, d, @x, @y, @z
from table2
where id = @id

編集:
追加した追加フィールドを使用すると、次のようになります。

insert into table1 (i, j, k, a, b, c, x, y, z)
select @i, @j, @k, a, b, c, @x, @y, @z
from table2
where id = @id
于 2009-07-06T22:06:26.490 に答える
1

挿入されるデータを特定するのに問題がある場合は、開発プロセスを通じて一時テーブルが役立つ可能性があります。レコードをループするためにカーソルを「必要とする」他のデータ変更を実行する必要がある場合にも役立ちます。

それ以外の場合は、フィールドを追加するときに更新する必要があるコードの別の部分にすぎません。

于 2009-07-07T01:37:35.423 に答える
-2

MySQL GUIツールを使用できますが、これが可能かどうかはわかりません。 http://dev.mysql.com/downloads/gui-tools/5.0.html

于 2009-07-06T22:07:23.180 に答える