0

関係が 1 対 1 であるため、結合されたテーブルを関連するエンティティと統合しました。

したがって、元のww_staffテーブルにww_contacts詳細が直接保持されます。

MySQL の観点から論理的だと思うことに基づいて次のステートメントを書きましたが、
満足ではありません。

誰かが同様の解決策や露骨な違反を見ることができますか?

INSERT INTO 
  ww_staff s 
  (phone, mobile, email, skype) 
VALUES 
(
  SELECT w.phone, w.mobile, w.email, w.skype 
  FROM ww_contacts w
  JOIN ww_staff s
  ON s.staff_ID = w.contacts_ID
);
4

2 に答える 2

2

VALUES() を削除するだけです

INSERT INTO ww_staff s (phone, mobile, email, skype) 
SELECT w.phone, w.mobile, w.email, w.skype FROM ww_contacts w
JOIN ww_staff s
ON s.staff_ID = w.contacts_ID;

- アップデート

から選択しているためww_contacts w JOIN ww_staff、すべてのレコードが既に存在し、重複を挿入したくない場合は、結合で更新を使用します。

UPDATE ww_staff s JOIN ww_contacts w ON s.staff_ID = w.contacts_ID
SET s.phone = w.phone, s.mobile = w.mobile, s.email = w.email, s.skype = w.skype;

次回は、質問で何をしようとしているのかを詳しく説明してください。

于 2010-12-04T08:20:50.663 に答える
0

INSERT ... SELECT ... ON DUPLICATE KEY UPDATE声明を出す必要があります。これにより、新しい行が挿入され、既存の行が更新されます。

INSERT INTO 
  ww_staff
  (staff_ID, phone, mobile, email, skype) 
SELECT w.contacts_ID, w.phone, w.mobile, w.email, w.skype 
  FROM ww_contacts w
  JOIN ww_staff s
  ON s.staff_ID = w.contacts_ID
ON DUPLICATE KEY UPDATE
 ww_staff.phone = w.phone, ww_staff.mobile = w.mobile, ww_staff.email = w.email, ww_staff.skype = w.skype
于 2010-12-04T20:09:28.837 に答える