Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    MYSQL - JOIN con CHIAVI UNICHE

    Salve a tutti, dovrei trovare la soluzione a questo problema:

    Tabella1

    |C1|C2|

    con T1 CHIAVE UNICA

    Tabella2

    |C1|C3|

    Nella Tabella 2 però, C1 NON è chiave unica!


    Ora se faccio:

    SELECT * FROM Tabella1 LEFT JOIN Tabella2 ON Tabella1.C1=Tabella2.C1

    Mi da un errore di vincolo di chiave unica non rispettato

    Non credevo che la tabella creata col SELECT si ritrovasse gli stessi vincoli delle tabelle su cui lavorava...


    Ora però il problema è che nella Tabella1 non posso togliere il vincolo di univocità, e nella Tabella2, non posso inserirlo...come posso risolvere il problema???

  2. #2
    sarebbe interessante capire cosa hai scritto....
    C1 con chiave unica T1 ... hai forse sbagliato a scrivere ? ma perche' non posti le cose come realmente sono?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ovviamente ho sbagliato a scrivere, non era T1, ma C1, credevo che fosse cmq comprensibile la cosa, ma correggo l'errore

    --------------------------------------------------------------------------------------
    MYSQL - JOIN con CHIAVI UNICHE Salve a tutti, dovrei trovare la soluzione a questo problema:

    Tabella1

    |C1|C2|

    con C1 CHIAVE UNICA

    Tabella2

    |C1|C3|

    Nella Tabella 2 però, C1 NON è chiave unica!

    Ora se faccio:

    SELECT * FROM Tabella1 LEFT JOIN Tabella2 ON Tabella1.C1=Tabella2.C1

    Mi da un errore di vincolo di chiave unica non rispettato

    Non credevo che la tabella creata col SELECT si ritrovasse gli stessi vincoli delle tabelle su cui lavorava...

    Ora però il problema è che nella Tabella1 non posso togliere il vincolo di univocità, e nella Tabella2, non posso inserirlo...come posso risolvere il problema???
    ---------------------------------------------------------------------------------------

    Non posto per intero la cosa, perchè la base di dati su cui sto lavorando è molto più complessa di poche colonne, e se l'errore di battitura "T1" invece di "C1", ti rende impossibile comprende 2 tabelle con 2 colonne ognuna, credo ti sarebbe ancora più complesso capire una base di dati con 12 tabelle e 20 campi ognuna.

    Il consiglio che gentilmente vorrei chiedere credo sia possibile esporlo anche su questo esempio molto più semplice e chiaro.

    Ringrazio chiunque sappia aiutarmi

  4. #4
    quello che non si capiva era se la chiave unica (primaria) era C1 o T1...

    un'altra cosa che non si capisce e' come puoi creare una tabella con un SELECT.... a meno che prima non ci sia un INSERT od un CREATE TABLE.

    Ma sicuramente arrivera' qualcuno che capisce meglio di me.....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Perdonami ma ti sarei grato se volessi evitare di portare questo post su una vena polemica, mentre apprezzerei tantissimo qualsiasi suggerimento.

    Per educazione chiarisco che creare una tabella col SELECT non voleva intendere crearla nel database (cosa che fa CREATE table e probabilmente ALTER table, quando rinomini la tabella...INSERT non crea tabelle).

    Una SELECT non è altro che una nuova tabella che ha le colonne e le righe(ed a quanto pare, anche i vincoli) ottenute dall'interrogazione, ora non so se questa tabella sia limitata alla RAM, o risiede fisicamente in un file temporaneo, ma ciò esula dal post, quindi evito volentieri di andare OT.

    Grazie cmq per le risposte.

  6. #6
    Originariamente inviato da controvento07
    Perdonami ma ti sarei grato se volessi evitare di portare questo post su una vena polemica, mentre apprezzerei tantissimo qualsiasi suggerimento.
    siccome i campi hanno lo stesso nome, prova ad attribuire ad essi un alias.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    In realtà il problema non risiede nei nomi dei campi, ma nei vincoli, perchè in TABELLA1 il campo C1 è chiave unica, in TABELLA2 il campo C1 non lo è e ci sono ripetizioni, e quando si effettua la SELECT i vincoli di unicità della TABELLA1 lanciano l'errore.

    Si dovrebbe dire alla SELECT di ignorare i vincoli, avevo trovato qualcosa del genere in ORACLE, dove esistono le parole chiave, DISABLE, NOVALIDATE


    http://cristiancudizio.wordpress.com...-di-integrita/

    ma non ho trovato nulla di simile in Mysql, però dovrebbe esistere, ho vaghe reminiscenze scolastiche...se non fossi così ignorante in inglese, magari lo avrei già scoperto

  8. #8
    sinceramente non capisco il problema. E' assolutamente normale che due tabelle siano in relazione uno a molti. Dove ovviamente "uno" puo' essere o meno chiave unica (PRIMARIA?) e il "molti" certamente no. L'importante e che siano correttamente relazionate.

    Non ho mai riscontrato tale problema in una SELECT. Forse e' qualcos'altro....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    In effetti hai ragione, non ha senso il messaggio di errore di Mysql, doveva esserci qualche altro vincolo che mi è sfuggito.

    Grazie, buona giornata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.