Domanda

Ok, ecco il mio dilemma: ho un database creato con circa 5 tabelle tutte con la stessa identica struttura di dati. I dati vengono separati in questo modo ai fini della localizzazione e per suddividere un totale di circa 4,5 milioni di record.

La maggior parte delle volte è necessaria una sola tabella e tutto va bene. Tuttavia, a volte sono necessari dati da 2 o più tabelle e devono essere ordinati in base a una colonna definita dall'utente. È qui che ho problemi.

colonne di dati:

id, band_name, song_name, album_name, genre

Dichiarazione di MySQL:

SELECT * from us_music, de_music where `genre` = 'punk'

MySQL rileva questo errore:

#1052 - Column 'genre' in where clause is ambiguous

Ovviamente, sto sbagliando. Qualcuno vuole far luce su questo per me?

È stato utile?

Soluzione

Penso che tu stia cercando la UNION , a la

(SELECT * from us_music where `genre` = 'punk')
UNION
(SELECT * from de_music where `genre` = 'punk')

Altri suggerimenti

Sembra che saresti più felice con un solo tavolo. I cinque hanno lo stesso schema e talvolta devono essere presentati come se provenissero da una tabella e mettono tutto in una tabella.

Aggiungi una nuova colonna che può essere utilizzata per distinguere tra le cinque lingue (suppongo che sia una lingua diversa tra le tabelle da quando hai detto che era per la localizzazione). Non preoccuparti di avere 4,5 milioni di record. Qualsiasi database reale può gestire tale dimensione senza problemi. Aggiungi gli indici corretti e non avrai problemi a gestirli come un'unica tabella.

Una delle risposte sopra è valida o un modo alternativo è quello di espandere il nome della tabella per includere anche il nome del database, ad esempio:

SELECT * from us_music, de_music where `us_music.genre` = 'punk' AND `de_music.genre` = 'punk'

La colonna è ambigua perché appare in entrambe le tabelle dovresti specificare il campo where (o sort) in modo completo come us_music.genre o de_music.genre, ma di solito dovresti specificare due tabelle se poi avessi intenzione di unirti li insieme in qualche modo. La struttura con cui hai a che fare viene occasionalmente definita una tabella partizionata, sebbene di solito sia fatta per separare il set di dati in file distinti piuttosto che per dividere il set di dati in modo arbitrario. Se sei responsabile della struttura del database e non c'è alcun buon motivo per partizionare i dati, allora creerei una grande tabella con un extra "origine" campo che contiene un codice paese, ma probabilmente lo stai facendo per motivi di prestazioni legittime. O usa un sindacato per unirti ai tavoli che ti interessano http: / /dev.mysql.com/doc/refman/5.0/en/union.html o utilizzando il motore di database Merge http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html .

Il tuo tentativo originale di estendere entrambe le tabelle crea un JOIN implicito. Questo è disapprovato dalla maggior parte dei programmatori SQL esperti perché separa le tabelle da combinare con la condizione di come.

UNION è una buona soluzione per le tabelle così come sono, ma non ci dovrebbero essere motivi per cui non possano essere inserite in un'unica tabella con indicizzazione decente. Ho visto che aggiungere l'indice corretto a una tabella di grandi dimensioni aumenta la velocità della query di tre ordini di grandezza.

L'istruzione union causa tempi di transazione in enormi quantità di dati. È consigliabile eseguire la selezione in 2 passaggi:

  1. seleziona l'id
  2. quindi seleziona la tabella principale con essa
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top