Pregunta MySQL - Selección de datos de múltiples tablas, todas con la misma estructura pero diferentes datos


Bien, este es mi dilema. Tengo una base de datos configurada con alrededor de 5 tablas, todas con la misma estructura de datos. Los datos se separan de esta manera con fines de localización y para dividir un total de aproximadamente 4,5 millones de registros.

La mayoría de las veces solo se necesita una tabla y todo está bien. Sin embargo, a veces se necesitan datos de 2 o más de las tablas y debe ser ordenada por una columna definida por el usuario. Aquí es donde estoy teniendo problemas.

columnas de datos:

id, band_name, song_name, album_name, genre

Declaración de MySQL:

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

MySQL escupe este error:

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

Obviamente, estoy haciendo esto mal. ¿Alguien quiere arrojar algo de luz sobre esto para mí?


74
2018-01-03 19:53


origen


Respuestas:


Creo que estás buscando el UNIÓN cláusula, a la

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

168
2018-01-03 20:00



Parece que estarías feliz con una sola mesa. Los cinco que tienen el mismo esquema, y ​​que a veces necesitan ser presentados como si vinieran de una mesa, apuntan a ponerlo todo en una tabla.

Agregue una nueva columna que se pueda usar para distinguir entre los cinco idiomas (supongo que su idioma es diferente entre las tablas ya que dijo que era para localización). No te preocupes por tener 4,5 millones de registros. Cualquier base de datos real puede manejar ese tamaño sin problema. Agregue los índices correctos y no tendrá problemas para tratarlos como una sola tabla.


19
2018-01-03 20:00



Cualquiera de las respuestas anteriores es válida, o una forma alternativa es expandir el nombre de la tabla para incluir también el nombre de la base de datos, por ejemplo:

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

5
2018-01-03 20:06



La columna es ambigua porque aparece en ambas tablas que necesitaría especificar el campo de dónde (u ordenar) completamente, como us_music.genre o de_music.genre, pero generalmente especificaría dos tablas si luego las uniría en de alguna manera. La estructura con la que se trata se denomina ocasionalmente tabla dividida, aunque generalmente se utiliza para separar el conjunto de datos en archivos distintos, en lugar de simplemente dividir el conjunto de datos arbitrariamente. Si usted está a cargo de la estructura de la base de datos y no hay una buena razón para dividir los datos, construiría una gran tabla con un campo de "origen" adicional que contiene un código de país, pero probablemente lo haga por razones de rendimiento legítimo . Utilice una unión para unir las tablas que le interesan http://dev.mysql.com/doc/refman/5.0/en/union.html o usando el motor de base de datos Merge http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html.


3
2018-01-03 20:12



Su intento original de abarcar ambas tablas crea un JOIN implícito. Esto es mal visto por la mayoría de los programadores de SQL porque separa las tablas para combinarlas con la condición de cómo.

los UNION es una buena solución para las tablas tal como están, pero no debería haber ninguna razón para que no puedan colocarse en la misma tabla con una indexación decente. He visto agregar el índice correcto a una tabla grande para aumentar la velocidad de consulta en tres órdenes de magnitud.


3
2018-01-05 23:51



los union declaración causa un tiempo de trato en grandes cantidades de datos. Es bueno realizar la selección en 2 pasos:

  1. selecciona la identificación
  2. luego selecciona la tabla principal con ella

3
2017-11-07 13:33