es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una tabla a partir de una tabla existente

Estoy en Oracle APEX y me gustaría crear una nueva tabla a partir de otra existente como esta:

Tengo una columna en una tabla llamada SONGS que es la siguiente:

ARTIST NAME Otra cabecera
Bad Bunny fila
Bad Bunny, Ozuna, Daddy Yankee fila

Y quiero tener esto en otra tabla:

ID Artista
1 Bad Bunny
2 Ozuna
3 Daddy Yankee

Además, a partir de estas 2 tablas me gustaría crear otra tabla o relación para indicar en qué canciones ha participado un artista.

Algo así:

ID Canción ID Artista
1 1
2 1
2 2

Quiero que esta tercera tabla sepa en qué canción ha participado un artista.

Así que tengo problemas para crear la segunda y tercera tabla a partir de la primera.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear la segunda tabla que separa los nombres de los artistas, puedes usar la función “Split” en Oracle APEX.

    Aquí tienes un ejemplo de consulta SQL que crea la nueva tabla:

    CREATE TABLE ARTISTS (
      ID NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
      Artist VARCHAR2(50)
    );
    
    INSERT INTO ARTISTS (Artist)
    SELECT DISTINCT trim(regexp_substr(ARTIST_NAME, '[^,]+', 1, LEVEL)) Artist
    FROM SONGS
    CONNECT BY instr(ARTIST_NAME, ',', 1, LEVEL - 1) > 0 or LEVEL = 1
    ORDER BY Artist;
    

    Esta consulta crea una nueva tabla llamada “ARTISTS” con una columna ID y una columna Artist. Luego utiliza la función Split para seleccionar nombres de artistas distintos de la tabla SONGS e insertarlos en la tabla ARTISTS.

    Para crear la tercera tabla que muestra qué artistas han participado en cada canción, puedes usar una operación “join” en una consulta SQL.

    Aquí tienes un ejemplo de consulta SQL que crea la nueva tabla:

    CREATE TABLE SONG_ARTIST (
      Song_ID NUMBER,
      Artist_ID NUMBER,
      PRIMARY KEY (Song_ID, Artist_ID),
      FOREIGN KEY (Song_ID) REFERENCES SONGS (ID),
      FOREIGN KEY (Artist_ID) REFERENCES ARTISTS (ID)
    );
    
    INSERT INTO SONG_ARTIST (Song_ID, Artist_ID)
    SELECT SONGS.ID, ARTISTS.ID
    FROM SONGS
    JOIN ARTISTS ON instr(',' || SONGS.ARTIST_NAME || ',', ',' || ARTISTS.Artist || ',') > 0;
    

    Esta consulta primero crea una nueva tabla llamada “SONG_ARTIST” con una columna Song_ID y una columna Artist_ID. Luego utiliza una operación “join” para seleccionar los IDs de las canciones y los IDs de los artistas de las tablas SONGS y ARTISTS, respectivamente. Inserta estos valores en la tabla SONG_ARTIST y crea restricciones de clave externa para asegurarse de que los IDs coincidan con valores existentes en las tablas SONGS y ARTISTS.

    Con estas nuevas tablas en su lugar, ahora puedes consultar fácilmente datos sobre las canciones y los artistas en tu base de datos.

Comments are closed.