Trasferimento di dati all'interno di un db MySQL da un tavolo all'altro con istruzione SQL

StackOverflow https://stackoverflow.com/questions/4352621

  •  08-10-2019
  •  | 
  •  

Domanda

ho consolidato un tavolo unito con esso è di entità correlata come il rapporto è stato uno-a-uno.

Così ora il tavolo ww_staff originale detiene direttamente i dettagli ww_contacts.

ho scritto la seguente dichiarazione sulla base di quello che penso sia logica dal punto di vista di MySQL
ma - non è felice.

Qualcuno può vedere una soluzione simile o di una trasgressione blatent?

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
);
È stato utile?

Soluzione

È necessario fare una dichiarazione INSERT ... SELECT ... ON DUPLICATE KEY UPDATE. Ciò inserire nuove righe e quelle esistenti aggiornamento:

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

Altri suggerimenti

Basta rimuovere i valori ()

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;

- UPDATE

Dal momento che si sta selezionando da ww_contacts w JOIN ww_staff - tutti i record ci sono già - e non si desidera inserire i duplicati, utilizzare un aggiornamento con un join:

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;

La prossima volta si prega di spiegare di più nella tua domanda ciò che si sta cercando di fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top