Función de fusión de subtabla MySQL

Hay muchas formas de fusionar tablas MySQL, y las siguientes son algunas formas comunes:

  1. Utilice la instrucción UNION ALL de MySQL para combinar los resultados de cada subtabla, por ejemplo:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
  1. Use la vista MySQL (Ver) para fusionar subtablas, por ejemplo:
CREATE VIEW myview AS
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3;

La vista se puede consultar directamente:

SELECT * FROM myview;
  1. Use el procedimiento almacenado de MySQL (procedimiento almacenado) para generar declaraciones dinámicamente para fusionar tablas, por ejemplo:
CREATE PROCEDURE merge_tables()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE tbl, sql_stmt VARCHAR(255);
  DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = 'mydatabase' AND table_name LIKE 'table%';
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 
  OPEN cur;
 
  read_loop: LOOP
    FETCH cur INTO tbl;
    IF done THEN
      LEAVE read_loop;
    END IF;
 
    SET sql_stmt = CONCAT(sql_stmt, "SELECT * FROM ", tbl, " UNION ALL ");
 
  END LOOP;
 
  CLOSE cur;
 
  SET @sql_stmt = CONCAT('SELECT * FROM (', LEFT(sql_stmt, LENGTH(sql_stmt) - 11), ') AS t');
 
  PREPARE stmt FROM @sql_stmt;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
 
END

El procedimiento almacenado se puede llamar directamente:

CALL merge_tables();

Nota: Lo anterior es un código de muestra, que debe modificarse adecuadamente de acuerdo con la situación real. Al mismo tiempo, la combinación de varias subtablas dará lugar a un rendimiento de consulta degradado, utilícelo con precaución.

Después de usar UNION ALL para combinar los resultados de varias subconsultas, puede realizar operaciones de agrupación (GROUP BY) en los resultados combinados.

Por ejemplo, supongamos que tenemos dos tablas: empleados y clientes, y queremos contar la cantidad de empleados y clientes en cada ciudad, podemos usar la siguiente consulta SQL:

SELECT city, 'employee' AS type, COUNT(*) AS cnt FROM employees GROUP BY city
UNION ALL
SELECT city, 'customer' AS type, COUNT(*) AS cnt FROM customers GROUP BY city
ORDER BY city, type;

El proceso de ejecución de la declaración de consulta SQL anterior es: primero consulte la cantidad de empleados en cada ciudad en la tabla de empleados, luego combine los resultados con la cantidad de clientes en cada ciudad en la tabla de clientes y finalmente ordene por ciudad y tipo ( empleado o cliente).

Tenga en cuenta que al usar la declaración UNION ALL para combinar varias subconsultas, el número y los tipos de columnas devueltas por cada subconsulta deben ser los mismos. En el ejemplo anterior, agregamos una columna de tipo para distinguir a los empleados de los clientes, asegurándonos de que el número y el tipo de las columnas de resultados de las dos subconsultas sean iguales.

Si utiliza la declaración GROUP BY en la consulta de la subtabla, el servidor de la base de datos agrupará las columnas especificadas en cada tabla. En este punto, estas tablas se tratarán como subconsultas y sus resultados agrupados se combinarán para producir el resultado final.

Por ejemplo, supongamos que tenemos dos tablas table1 y table2, las cuales tienen una columna llamada "ciudad", y queremos contar la cantidad de clientes en cada ciudad en estas dos tablas. Podemos usar la siguiente declaración de consulta SQL:

SELECT city, COUNT(*) AS cnt FROM (
    SELECT city FROM table1
    UNION ALL
    SELECT city FROM table2
) t GROUP BY city;

El proceso de ejecución de la declaración de consulta SQL anterior es el siguiente: primero extraiga la información de la ciudad de la tabla 1 y la tabla 2 (tenga en cuenta que el operador UNION ALL se usa aquí, fusionará todas las filas de datos, incluidas las filas de datos duplicadas), y obtenga una nueva virtual tabla t, y luego realice una operación de agrupación en la tabla virtual t para obtener la cantidad de clientes en cada ciudad.

Por lo tanto, en una consulta de tabla dividida, los resultados de agrupación de las tablas fusionadas se realizan en subconsultas.

Supongo que te gusta

Origin blog.csdn.net/qq_27487739/article/details/131155818
Recomendado
Clasificación