|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
[MySQL] "Sicronizzare" due tabelle tramite il campo di relazione
Ciao a tutti voi.
Ho la necessita di "sincronizzare" due tabelle: ESEMPLARI id, etc.... EXPO id, id_esemplari Diciamo che: - ESEMPLARI e' la tabella madre con "id" chiave primaria - EXPO e' in relazione con la tabella ESEMPLARI tramite la colonna id_esemplari Io vorrei che tutti gli id di ESEMPLARI siano contenuti in id_esemplari di EXPO. Al momento invece ho una situazione anomala: 1) non tutti gli id di ESEMPLARI sono contenuti in id_esemplari di EXPO 2) su EXPO sono presenti id_esemplari che non trovano una corrispondenza in EXPO. Come potrei riallineare il tutto? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Non capisco la tua affermazione.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 737
|
penso di aver capito quello che vorresti fare, tecnicamente "sincronizzare" significa creare un vincolo di integrità referenziale tra 2 tabelle del database.
in MySQL questo si fà inserendo una FOREIGN KEY al momento della creazione della tabella ... ti posto questo esempio preso paro para da W3schools spero sia comprensibile: Codice:
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) )
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Alla fine ho risolto tramite queste due query:
Codice:
-- Ho rimosso le righe contenenti gli ID_ESEMPLARI non presenti nella tabella ESEMPLARI
DELETE FROM expo_westie
WHERE NOT EXISTS(SELECT NULL
FROM esemplari f
WHERE f.id = id_esemplari)
-- Ho inserito gli ID della tabella ESEMPLARI non presenti nella tabella EXPO_WESTIE
INSERT INTO expo_westie (id_esemplari)
SELECT id
FROM esemplari
WHERE id NOT IN (
SELECT id_esemplari
FROM expo_westie
)
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 737
|
Quote:
Inoltre la tua soluzione potrebbe generare un programma che funziona correttamente ma è meno "robusto" cioè è più facile che quando viene modificato generi errori. In ogni caso direi che è bene imparare ad usare le FOREGN KEY e a capire quando bisogna inserirle nelle nostre tabelle.
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
quoto DoctorT, mi piacerebbe capire a cosa ti serve questa relazione
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
a cosa ti serve avere una tabella con riferimenti alle primary key di una sulle primary key di un'altra
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
La connessione non e[ tra due PRIMARY KEY.
Io devo relazionare ESEMPLARI > id (PRIMARY KEY) EXPO > id_esemplari (NO PRIMARY KEY) |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
mi sono spiegato male, su EXPO avrai una sua primary key con il campo id_esemplari che certamente non è primary key ma che deve avere lo stesso valore della primary key di ESEMPLARI... ho capito bene?
se si non ho capito a cosa ti può servire... |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Esatto, giusto!
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Devo capire come usarle, fino ad oggi non ne ho mai fatto uso.
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Auto ditatta....
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
Scusa se ripeto per l'ennesima volta la stessa domanda, ma qualè lo scopo di avere 2 tebelle così composte?
Non lo chiedo per farmi gli affari tuoi, ma per capire se ci può essere un metodo migliore. |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Quote:
Successivamente per tali esemplari e' nata l'esigenza di inserire dei risultati nelle Esposizioni con diverse informazioni. Cosi' e' stata creata la tabella EXPO con PRIMA KEY id e messe in relazione con la tabella ESEMPLARI tramite la colonna id_esemplari. Quote:
Alcuni consigli in merito? Tutorial da linkarmi? Grazie. |
||
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Esatto, all'inizio avrei dovuto avere piu' esposizioni, dopo invece la corrispondenza tra le due tabelle e diventata di
1 a 1. |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 210
|
Se e' 1 a 1 non ti conviene alterare la tabella ESEMPLARI aggiungendo gli attributi che ti servono?
Presumo che le esportazioni le leggi ogni volta che leggi esemplari, raddoppiando il costo di lettura inutilmente.. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Eh lo so, ma si tratta di un progetto alquanto vecchio, tutto e' cambiato in corso d'opera e quindi....
Ne faro' tesoro per la prossima volta. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:03.




















