- PR -

SQL構文の質問です

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/04/05
投稿数: 1
投稿日時: 2007-04-05 13:39
すいません。初心者のSQL構文の質問です。
データベースはSQLServer2000です。
AとBテーブルがあります。

Aテーブル
ID|DATA|
1 |AA |
2 |BB |
3 |CC |
4 |DD |
5 |EE |
6 |FF |

Bテーブル
ID|DATA|DATA2
1 |AA |aa|
2 |BB |bb|
3 |CC |cc|
4 |DD |dd|

AテーブルからBテーブルにIDが5,6のデータを追加
AテーブルMASTERで更新されたデータをBテーブルのIDとDATA列に追加したいのですが
うまくいきません。
あと逆にAテーブルMASTERで削除されたデータをBテーブルでも削除したいのです。
すいませんが教えてください。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-04-05 13:47
トリガを使えば楽だと思いますよ。
YASUYOKA
ベテラン
会議室デビュー日: 2007/03/19
投稿数: 71
投稿日時: 2007-04-05 13:58
引用:

未記入さんの書き込み (2007-04-05 13:39) より:
AテーブルからBテーブルにIDが5,6のデータを追加
AテーブルMASTERで更新されたデータをBテーブルのIDとDATA列に追加したいのですが
うまくいきません。
あと逆にAテーブルMASTERで削除されたデータをBテーブルでも削除したいのです。
すいませんが教えてください。



Bテーブルを正規化して、かめたろさんが仰るようにトリガー
を使うのが現実的です。

なお、Aテーブルで削除されたデータに該当するBテーブルの
データ削除は、FOREIGNキーとCASCADE句で行えます。
# SQL ServerにFOREIGNキーとCASCADE句の概念はありますよね。
turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2007-04-05 14:20
SQLの書き方という点では、下のようになるかと思います。

1. 追加 ============================================

INSERT INTO
Bテーブル
(
id, data
)
SELECT
id, data
FROM
Aテーブル
WHERE
NOT EXISTS
(
SELECT
ID
FROM
Bテーブル
WHERE
Bテーブル.ID = Aテーブル.ID
)


2. 更新 ============================================


UPDATE
Bテーブル
SET
DATA = Aテーブル.DATA
FROM
Bテーブル
INNER JOIN
Aテーブル
ON
Bテーブル.ID = Aテーブル.ID
WHERE
Bテーブル.DATA != Aテーブル.DATA


3. 削除 ============================================

DELETE FROM
Bテーブル
WHERE
NOT EXISTS
(
SELECT
ID
FROM
Aテーブル
WHERE
Aテーブル.ID = Bテーブル.ID
)
1

スキルアップ/キャリアアップ(JOB@IT)