Trasferimento di dati all'interno di un db MySQL da un tavolo all'altro con istruzione SQL
-
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
);
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.